2013-04-01 29 views
4

是否有可能使用JQuery驗證自定義選擇器和驗證邏輯?在下面的脈絡:JQuery驗證自定義選擇器和邏輯

$('#myForm').validate({ 
    rules: { 
     '[myattr="foo"]': function(content) { return $(content).val().contains('bar'); } 
    } 
}) 

我似乎無法找到在文檔中的答案。

謝謝。

+0

你的具體驗證邏輯可以很容易地表示爲正則表達式 –

回答

7

要申報.validate()以內的規則,您必須必須使用name屬性。解決方法是使用rules('add')方法,該方法可讓您使用任何jQuery選擇器。 (然而,儘管分配規則的選擇的方法,每場還必須包含一個唯一的name屬性。)

$('[myattr="foo"]').rules('add', { 
    required: true, 
    messages: { 
     required: "optional custom message" 
    } 
}); 

參見:http://docs.jquery.com/Plugins/Validation/rules#.22add.22rules

注意

  • 製作確保你使用最新版本的插件,它最近只修復了在內使用messages的錯誤打破了規則。

  • 如果您的選擇器類似於想要選擇多個元素的class,則必須將rules('add')包裝在jQuery .each()中。

$('.myclass').each(function() { 
    $(this).rules('add', { 
     required: true, 
     messages: { 
      required: "optional custom message" 
     } 
    }); 
}); 

要使用自定義功能作爲一項規則,你只需要使用addMethod方法來創建你的方法/規則,然後宣佈它像任何其他規則。

$.validator.addMethod('myrule', function(value, element, params) { 
    // your function 
    // return true to pass 
    // return false to fail 
}, "error message"); 

$('#myform').validate({ 
    rules: { 
     myfield: { 
      required: true, 
      myrule: true 
     } 
    } 
}); 

參見:http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage