如何在 jQuery.validation 中添加不等于规则

Posted

技术标签:

【中文标题】如何在 jQuery.validation 中添加不等于规则【英文标题】:How to add a Not Equal To rule in jQuery.validation 【发布时间】:2011-04-04 00:51:18 【问题描述】:

我想知道如何制定它,以便我可以制定一个字段不等于值的规则。就像我有一个名为 'name' 的字段,所以我不想要 'name' = 'Your Name'。

有人知道如何做到这一点吗? 感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以使用自定义方法,如下所示:

jQuery.validator.addMethod("notEqual", function(value, element, param) 
  return this.optional(element) || value != param;
, "Please specify a different (non-default) value");

然后像这样使用它:

$("form").validate(
  rules: 
    nameField:  notEqual: "Your Name" 
  
);

将其添加为这样的规则使其更具可扩展性,因此您可以使用它与其他字段中的默认值进行比较。

【讨论】:

是否有机会使其不区分大小写? @compguy24 那是return this.optional(element) || value.toLowerCase() != param.toLowerCase();addMethod 感谢您的解释!直到今天我才明白它是如何工作的!干杯! 也可以自定义发送消息吗?【参考方案2】:

尼克的回答符合要求。我需要比较表单上的两个字段并确保它们不相等。我稍微修改了一下。

jQuery.validator.addMethod("notEqual", function(value, element, param) 
 return this.optional(element) || value != $(param).val();
, "This has to be different...");

$("#cform").validate(

    rules: 
        referringsales:  required: false, notEqual: "#salesperson" 
    
);

编辑回答评论:

如果您要比较多组下拉菜单,该方法也适用于这种情况。

jQuery.validator.addMethod("notEqual", function(value, element, param) 
 return this.optional(element) || value != $(param).val();
, "This has to be different...");

$("#cform").validate(

    rules: 
        referringsales:  required: false, notEqual: "#salesperson" 
        DropDown2:  required: false, notEqual: "#SecondBase" 
    
);

如果问题是关于将引用销售与 2 个不同的基准(例如 #initialContact 和 #salesperson)进行比较,那么只需将该规则添加到列表中即可。

referringsales:  required: false, notEqual: "#salesperson", notEqual: "#initialContact" 

【讨论】:

Sam 的评论:“@Frank Luke:如果我有 2 个不同的下拉菜单怎么办?” @PeterO.,第二个下拉菜单有自己的规则。像这样: secondDropDown: required: false, notEqual: "#secondBase" 第二个碱基可以是第一个碱基或不同的碱基。 notEqual 方法检查引用的那个。还是您的意思是您必须将一个值与 2 个不同的下拉菜单进行比较? 这不是我的评论。我只是在此处添加它,因为它的作者将其写为答案而不是评论。因此,您应该修改此答案以回复评论。【参考方案3】:

我提出一个多值函数...

jQuery.validator.addMethod("notEqualTo",
function(value, element, param) 
    var notEqual = true;
    value = $.trim(value);
    for (i = 0; i < param.length; i++) 
        if (value == $.trim($(param[i]).val()))  notEqual = false; 
    
    return this.optional(element) || notEqual;
,
"Please enter a diferent value."
);

我称之为...

$("#abm-form").validate(
debug: true,
rules: 
    password1: 
        required: true,
        minlength: 10,
        notEqualTo: ['#lastname', '#firstname', '#email']
    ,
    password2: 
        equalTo: '#password1'
    

);

这对我有用!

【讨论】:

【参考方案4】:

下载包的additional-methods.js中有一个叫“notEqualTo”:

https://github.com/jzaefferer/jquery-validation/blob/master/src/additional/notEqualTo.js

【讨论】:

【参考方案5】:

不确定您是否得到了答案,但是:

返回 this.optional(element) ||价值 != 参数;

如果值是可变的,则不起作用。

需要阅读:

返回 this.optional(element) ||价值 != $(param).val();

干杯

【讨论】:

【参考方案6】:

在这里举了一些很好的例子,我写了另一个版本,它可以与多个字段一起检查

/*=====================================================*/
/* Jquery Valiation addMethod*/
/* Usage:  password: notEqualTo: ['#lastname', '#firstname', '#email'] */
/*====================================================*/
jQuery.validator.addMethod("notEqualTo",
    function (value, element, param) 
        var notEqual = true;
        value = $.trim(value);
        for (i = 0; i < param.length; i++) 

            var checkElement = $(param[i]);
            var success = !$.validator.methods.equalTo.call(this, value, element, checkElement);
            // console.log('success', success);
            if(!success)
                notEqual = success;
        

        return this.optional(element) || notEqual;
    ,
    "Please enter a diferent value."
);
/*=====================================================*/
/*=====================================================*/

用法

    $("form").validate(
        
            rules: 
                passwordNewConfirm: equalTo: "#passwordNew",
                passwordNew:  notEqualTo: "#password" ,
                password:  notEqualTo: ['#passwordNew', '#passwordNewConfirm'] 
            ,
        );

【讨论】:

【参考方案7】:

如果您希望它不像您的问题所暗示的那样只有一个值,您可以很容易地检查它,而无需任何外部插件。

$('#yourForm').submit(function(e) 
    if ( $('input[name="yourField"]').val()=='Your Name' )
        e.preventDefault();
        alert("Your message here");
    
);

【讨论】:

是的,但问题是“如何在 jQuery.validation 中添加不等于规则”你可以回复这个。这是另一种情况【参考方案8】:

非常感谢,尼克!一点补充:如果你有几个字段要验证到 validate() 函数中,语法应该是:

self.logo.rules(
    'add', 
       notEqual: "Select the Logo"
     
);

【讨论】:

【参考方案9】:

感谢@Nick Craver♦ 的回答,但在我的工作环境中,它需要稍作修改才能工作。

 $.validator.addMethod("notEqualTo", function(value, element, param) 
       return this.optional(element) || value != $(param).val();
 , 'This two elements are the same, please change it.');

【讨论】:

以上是关于如何在 jQuery.validation 中添加不等于规则的主要内容,如果未能解决你的问题,请参考以下文章

如何在jQuery.validation中添加Not Equal To规则

使用 Jquery Validation 验证印度车辆编号的车辆编号

使用 Jquery Validation 添加自定义错误消息

jquery.validation自定义正则表达式验证

jQuery validation 去除空格

jQuery Validation 插件:禁用对指定提交按钮的验证