jQuery验证数据属性中的自定义规则

Lor*_*nzo 5 jquery customvalidator jquery-validate

我有一个输入文本已经有一些验证规则

<input type="text" value="" placeholder="Write the code here" 
       name="myCode" id="myCode" data-rule-required="true" 
       data-msg-required="Required field" class="form-control" 
       aria-required="true">
Run Code Online (Sandbox Code Playgroud)

并创建了一个自定义规则来验证代码的语法

$("#myCode").rules("add", { checkCode: 
    function () { 
        return $('input[name=codeText]').val(); 
    } 
});
Run Code Online (Sandbox Code Playgroud)

使用这种方法我定义myCode应该通过使用也checkCode可以在输入中接收输入值的方法来验证codeText.

这非常有效.但是为了保持代码的清洁,我想在data-*属性中移动规则定义但我无法理解如何编写代码来动态传递返回的等价物$('input[name=codeText]').val().请看下面的问号.

<input type="text" value="" placeholder="Write the code here" 
       name="myCode" id="myCode" 
       data-rule-required="true" data-msg-required="Required field" 
       data-rule-checkCode="????" data-msg-checkCode="Invalid code" 
       class="form-control" aria-required="true">
Run Code Online (Sandbox Code Playgroud)

我要把什么放在属性值???

编辑

根据Sparky的回答,我最终将所有选择器放在属性上.像这样:

<input type="text" value="" placeholder="Write the code here" 
   [...]
   data-rule-checkCode="input[name=codeText]" 
   [...]>
Run Code Online (Sandbox Code Playgroud)

并在我的方法中使用它

$.validator.addMethod("checkCode", function(value, element, param) {
    return $(param).val();
}, '...');
Run Code Online (Sandbox Code Playgroud)

Spa*_*rky 6

并创建了一个自定义规则来验证代码的语法

$("#myCode").rules("add", { checkCode: 
    function () { 
        return $('input[name=codeText]').val(); 
    } 
});
Run Code Online (Sandbox Code Playgroud)

.rules()方法不是创建自定义规则的方法.这只是你如何在特定输入上声明现有规则.

的..addMethod()方法是如何创建自定义规则.

jQuery.validator.addMethod("checkCode", function(value, element) {
    return $('input[name=codeText]').val();
}, 'Please enter a valid email address.');
Run Code Online (Sandbox Code Playgroud)

然后你可以用.rules('add')它来分配你的领域......

$('input[name="myCode"]').rules('add', {
    checkCode: true
});
Run Code Online (Sandbox Code Playgroud)

请参阅:http: //jqueryvalidation.org/jQuery.validator.addMethod/


或者,您可以通过传递name参数来使方法通用...

jQuery.validator.addMethod("checkCode", function(value, element, param) {
    return $('input[name=' + param + ']').val();
}, 'Please enter a valid email address.');
Run Code Online (Sandbox Code Playgroud)

然后分配到您的领域......

$('input[name="myCode"]').rules('add', {
    checkCode: "codeText"
});
Run Code Online (Sandbox Code Playgroud)

至于使用数据属性,当您动态使用该.rules()方法时,不清楚为什么需要这样做.

也许在您正确创建checkCode规则之后,您可以使用data-rule-checkCode="true"或简单地声明它data-rule-checkCode="codeText".