今天我們來談一下關(guān)于使用jQuery表單驗(yàn)證的一個問題——忽視隱藏標(biāo)簽。在實(shí)際應(yīng)用中,我們往往會使用CSS的display屬性將一些表單標(biāo)簽隱藏起來,但是這樣做有可能會導(dǎo)致表單驗(yàn)證不準(zhǔn)確。下面我們來看一下具體的代碼實(shí)現(xiàn):
首先,我們來看一下一個簡單的表單驗(yàn)證代碼:
$('form').submit(function() { var name = $('input[name=name]').val(); if (!name) { alert('姓名不能為空!'); return false; } });
代碼很簡單,當(dāng)表單提交時,判斷姓名是否為空,如果為空則彈出提示信息并返回false。但是當(dāng)我們將姓名所在的input標(biāo)簽在CSS中設(shè)置為display:none時,由于該標(biāo)簽并未被移除,仍然存在于DOM中,因此依然會被驗(yàn)證:
input[name=name]{ display: none; }
為了避免這種情況發(fā)生,我們可以使用jQuery的:visible選擇器,這個選擇器可以幫助我們判斷一個元素當(dāng)前是否為可見狀態(tài),如果不可見則忽略該元素的驗(yàn)證:
$('form').submit(function() { var name = $('input[name=name]:visible').val(); if (!name) { alert('姓名不能為空!'); return false; } });
這樣就可以魯棒性地處理隱藏狀態(tài)的表單標(biāo)簽,保證驗(yàn)證的準(zhǔn)確性。
總結(jié)一下,忽視隱藏標(biāo)簽是一個常見的問題。如果不加以處理,會引發(fā)一系列奇怪的bug。使用jQuery的:visible選擇器可以幫助我們解決這個問題,寫出優(yōu)秀的表單驗(yàn)證代碼。