如何在jQuery验证中为一个字段添加多个方法

时间:2016-11-16 09:46:44

标签: jquery jquery-validate

jQuery验证插件可以通过一个字段传递多个方法吗?

例如,添加两个方法:

var num1 = 1;
    num2 = 10;
    range1 = 100;
    range2 = 250;
    value = $("#something_from_html")

$.validator.addMethod("method_one", function( value, element ) {
    if(value < num1 || value > num2)
        return false;
    return method_one(value, num1, num2);
}, I18N("wrong number"));


$.validator.addMethod("method_two", function( value, element ) {
    if( value < range1 || value > range2) 
        return false;
    return method_two(value, range1, range2);   
}, I18N("wrong range"));

并将不同的警告消息返回到一个字段:

$("#form").each(function(index, el)  {
    $(el).validate({
        rules: {
            something_from_html: {
                required: true,
                method_one: true,
                method_two: true
            },
        },

    });
});

HTML部分:

<form id="form" name="form">    
    <input type="text" name="something_from_html" id="something_from_html">
</form>

当我添加一个方法来统治时,它完美地运作。但是当我添加method_one和method_two时,它不起作用。有谁知道如何解决它?

1 个答案:

答案 0 :(得分:1)

问题是由于您的其他方法中的逻辑;他们需要返回一个布尔值来指示输入值的有效性。
目前他们试图用他们定义的验证方法名称调用一个不存在的全局方法。

您还需要使用parseInt()将输入的文本值转换为整数,以便将其与numrange值进行比较。此外,应在验证器方法中声明这些变量以保存任何范围问题。
试试这个:

$.validator.addMethod("method_one", function(value, element) {
    var num1 = 1, num2 = 10;
    value = parseInt(value, 10);
    return !(value < num1 || value > num2);
}, I18N("wrong number"));


$.validator.addMethod("method_two", function(value, element) {
    var range1 = 100, range2 = 250;
    value = parseInt(value, 10);
    return !(value < range1 || value > range2);
}, I18N("wrong range"));

Working example