2011-10-26 40 views
1

我正在寫一個系統利用jQuery驗證,通過json拉動自定義規則,消息並動態驗證單個頁面中的多個表單。一切都順順當當去除了我找不到正確的語法定製規則的任何像樣的信息....jquery驗證。自定義規則使用選擇器語法

例如:

我知道這個工程....

"ui_txt_GCPostcode": { 
    "required": "input[name=ui_rb_ItemAddress][value=Recipient]:checked" 
} 

我m在這裏說,只有當名稱爲ui_rb_ItemAddress和值爲Recipient的列表中的單選按鈕被選中時,才需要ui_txt_GCPostcode

這對我來說看起來像我可以根據包含特定選擇器屬性的dependency expressions指定裁定。

然而,這並不正常工作.....

"ui_sel_PCSelect": { 
     "required": "input[name=ui_txt_PostCodeSearch]:hidden, input[name=ui_txt_Address]:hidden" 
    } 

驗證器發射,即使我有ui_txt_Address可見。

我甚至設置驗證與ignore隱藏財產例如。

   // Validate the form once the defaults are set. 
       $validator = $form.validate({ 
        // This prevents validation from running on every 
        // form submission by default. 
        onsubmit: false, 
        messages: messages, 
        rules: rules, 
        errorContainer: $container, 
        errorLabelContainer: $("ol", $container), 
        wrapper: "li", 

        // Ignore hidden items. Why is this not working?? 
        ignore: ":hidden" 
       }); 

任何想法??我處於一個非常緊迫的期限,我開始恐慌。

+0

當input [name = ui_txt_PostCodeSearch] **和**'input [name = ui_txt_Address]'被隱藏時,是否希望'ui_sel_PCSelect'爲'required'? –

+0

@Andrew:是的......確實如此。我現在已經設法搞定了,但我想要一個乾淨的強大解決方案。 –

回答

1

這個選擇:

"input[name=ui_txt_PostCodeSearch]:hidden, input[name=ui_txt_Address]:hidden" 

將觸發required規則如果第一秒部分都爲真(見multiple selector)。這就是爲什麼即使可見規則也會觸發規則。

如果你想所需的元素,如果兩個是隱藏的,你可能必須提供的,而不是表達的依賴功能:

"ui_txt_GCPostcode": { 
    "required": function() { 
     return $("input[name='ui_rb_ItemAddress'][value='Recipient']:checked").length && 
      $("input[name='ui_rb_ItemAddress'][value='Recipient']:checked").length; 
    } 
} 

至於ignore財產不能正常工作,這對忽略匹配選擇器的字段(因此:hidden將告訴驗證器不驗證隱藏字段)。不知道你是否以這種方式使用它。