2011-11-15 68 views
2

我使用的方法如下所述:http://iamcam.wordpress.com/2008/01/15/unchecked-checkbox-values/即使取消選中該複選框也會獲取值,但我不會詳細討論爲什麼需要此選項,但這是必需的。這就是說..驗證共享相同名稱的輸入

所有這個奇妙的方法是我自己寫的形式抽象層的一部分,我有幾個複選框,我希望通過驗證jquery驗證,問題是,HTML是這樣的:

<input class="" type="hidden" value="0" name="check[legal]"> 
<input id="legal" class="required" type="checkbox" name="check[legal]" value="1"> 

什麼情況是,JQuery驗證驗證兩人的第一個輸入端(因爲它們均具有相同的名稱 我明白,我可以簡單地刪除第一個,用它做,我只想知道是否有任何方法來驗證第二個複選框,因爲它是一切(我可以在這裏看到兩條道路:1)根據輸入的id進行驗證2)從驗證中排除隱藏的元素,甚至如果我認爲這樣,它將避免即使第二個具有相同的名稱..)

+2

爲什麼他們必須有相同的名字?他們是否屬於同一組複選框?如果是這樣,他們一起驗證。如果不是,則爲其分配不同的名稱。這看起來很簡單,所以我錯過了什麼? – Sparky

+0

你錯過了我發佈的文章只是爲了避免這個問題。他們共享相同的名稱,所以如果第二個(可見的)沒有被檢查,我會在$ _POST數組中得到0而不是任何東西。 – 0plus1

+0

使用JavaScript將複選框的值複製到不同的隱藏字段中,並始終發送/使用該字段。僅僅因爲某些東西是帖子數組的一部分,並不意味着你必須使用它。 – Sparky

回答

3

好的,直接回答你的問題是,你可以定義一個自定義驗證方法爲shown in this example。以下是關鍵代碼:

$.validator.methods.checkLegal = function(value, element) { 
    return $('input[type=checkbox][name="check[legal]"]').attr('checked'); 
} 

$('form').validate({ 
    rules: { "check[legal]": {checkLegal: true} }, 
    messages: { "check[legal]": "You must check the box" }, 
}); 

但是,您的字段不需要具有相同的名稱以使用您提供的鏈接中描述的原則。事實上,如果你不這樣做,它會大大簡化事情。如果這不是複選框列表,爲什麼你需要在變量名中使用大括號也是不清楚的。

也就是說,here is a simple example不使用相同的名稱,存儲隱藏的值,並驗證可見覆選框。上面的替換是:

jQuery(function($) { 
    $('form').validate({ 
     rules: { "check[legal]": "required" }, 
    }); 

    $('#legal').click(function(e) { 
     $('#legalHidden').val($(this).attr('checked') ? 1 : 0); 
    }); 

}); 

在服務器上,你只需引用檢查[legalhidden],而不用打擾檢查[法律]。在客戶端上,所有驗證都是在檢查[合法]時完成的,每次單擊該值時都將複製到legalhidden var中。

+0

感謝您的回答。大家知道,變量名中的大括號可以幫助處理POST數組,例如在驗證未設置($ _ POST ['check'])時轉儲檢查。 – 0plus1

相關問題