使用jquery验证'greaterthan'函数

SC_*_*ams 1 jquery jquery-validate

我使用jQuery Validation方法"greaterThan",如Jon和Mike E.在Validate中描述的结束日期大于jQuery的开始日期

但是当我发送时:EndDate:{greaterThan:"#StartDate"}结果消息是'必须大于#StartDate'.我想做像EndDate这样的事情:{greaterThan:["#StartDate","Start Date"]}

但我不确定如何修改"更大的"方法.我尝试将'value'更改为'options [0]',但那是失败的.

有什么建议?谢谢.山姆.

Spa*_*rky 6

有没有这样的规则或方法叫做greaterThan的jQuery验证插件.您引用的答案仅仅是使用插件的.addMethod()方法来创建一个名为的自定义规则greaterThan.

引用OP:

"但是当我发送过来时:EndDate: { greaterThan: "#StartDate" }结果信息是'必须大于#StartDate'.我想做类似的事情EndDate: { greaterThan: ["#StartDate","Start Date"] }."

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

  • 请参阅文档中的第二个示例,该示例正确显示了如何在函数和错误消息中使用多个参数.

  • 假设您要传递第二个参数以改进错误消息,只需{1}在消息中使用第二个参数即可.

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

换一种说法...

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

rules: {
    field: {
        customRule: [x,y]
    }
} 
Run Code Online (Sandbox Code Playgroud)

在里面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之间"


假设链接答案中的函数是正确的,请按以下方式应用编辑...

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}.');
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

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

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}.');
Run Code Online (Sandbox Code Playgroud)