使用jquery验证'greaterthan'函数

时间:2013-12-27 16:13:46

标签: jquery jquery-validate

我正在使用Jon和Mike E.在Validate that end date is greater than start date with jQuery中描述的jQuery Validation方法“greaterThan”

但是当我发过来时:     EndDate:{greaterThan:“#StartDate”} 结果消息是“必须大于#StartDate”。我想做点什么     EndDate:{greaterThan:[“#StartDate”,“Start Date”]}

但我不确定如何修改“greaterThan”方法。我尝试将'value'更改为'options [0]',但那是一次失败。

有什么建议吗? 谢谢。 萨姆。

2 个答案:

答案 0 :(得分:6)

the jQuery Validate plugin内没有名为greaterThan的规则或方法。您引用的答案仅仅是使用插件的.addMethod()方法来创建名为greaterThan的自定义规则。

引用OP:

  

“但是当我发送时:EndDate: { greaterThan: "#StartDate" }结果消息是'必须大于#StartDate'。我想做EndDate: { greaterThan: ["#StartDate","Start Date"] }之类的事情。” < / p>

你的问题写得非常糟糕。但是,如果我理解正确的话,

  • 请参阅the second example in the documentation,其中正确显示了如何在函数和错误消息中使用多个参数。

  • 假设您要传递第二个参数以改进错误消息,只需使用消息中的{1}访问此第二个参数。

  • 在函数中,使用params[0]访问第一个参数。

换句话说......

当您使用多个参数声明规则时,如此示例...

rules: {
    field: {
        customRule: [x,y]
    }
} 

jQuery.validator.addMethod("customRule", function(value, element, params){...}, "message")内,参数如下:

在函数中:

params[0]等于x
params[1]等于y

消息中的

{0}等于“x”
{1}等于“y”

"Must be between {0} and {1}"将显示为“必须介于x和y之间”


假设linked answer中的功能正确,请按以下方式应用编辑...

jQuery.validator.addMethod("greaterThan", function(value, element, params) {    
    if (!/Invalid|NaN/.test(new Date(value))) {
        return new Date(value) > new Date($(params[0]).val());
    }    
    return isNaN(value) && isNaN($(params[0]).val()) || (Number(value) > Number($(params[0]).val())); 
},'Must be greater than {1}.');

按照您的要求声明规则......

$("form").validate({
    rules: {
        EndDate: {
            greaterThan: ["#StartDate","Start Date"]
        }
    }
});

修改

根据评论,只需检查第一个字段是否为空,然后再做其他事情......

jQuery.validator.addMethod("greaterThan", function(value, element, params) {
    if ($(params[0]).val() != '') {    
        if (!/Invalid|NaN/.test(new Date(value))) {
            return new Date(value) > new Date($(params[0]).val());
        }    
        return isNaN(value) && isNaN($(params[0]).val()) || (Number(value) > Number($(params[0]).val()));
    };
    return true; 
},'Must be greater than {1}.');

答案 1 :(得分:0)

让它变得简单。

使用minmax方法。

amount: {
  min: 1,
  max: 10
}

请参阅:https://jqueryvalidation.org/min-method/