2011-10-26 55 views
12

heyho,jQuery的形式验证插件:场1不等于2场

我被困在下面的问题:我试图阻止用户可以选择的领域“用户名”和“电子邮件”相同的值。我正在使用jquery表单验证插件(http://bassistance.de/jquery-plugins/jquery-plugin-validation/)

如果有人可以告诉我方式,请参阅我的代码:

// validate form  
$("#signupform").validate({ 

    rules: { 
     username: { 
      required: true, 
      minlength: 2, 
      remote: "/_misc/formcheck/username.cfm" 
     }, 
     password1: { 
      required: true, 
      minlength: 5 
     }, 
     password2: { 
      required: true, 
      minlength: 5, 
      equalTo: "#password1" 
     }, 
     email: { 
      required: true, 
      email: true, 
      remote: "/_misc/formcheck/email.cfm" 
     }, 
     email2: { 
      required: true, 
      email: true, 
      equalTo: "#email" 
     }, 
     usage: "required"      
    }, 
    messages: { 
     username: { 
      required: "please username!!", 
      minlength: "username at least 2 chars" 
     }, 
     password1: { 
      required: "please password!", 
      minlength: "password at least 5 chars" 
     }, 
     password2: { 
      required: "please password", 
      minlength: "password at least 5 chars", 
      equalTo: "password fields have to match" 
     }, 
     email: "validate email please!",    
     email2: { 
      required: "please provide correct email address!",    
      equalTo: "email fields must match!" 
     }, 
     usage: "please check my terms!" 
    }, 

在此先感谢,michbeck

回答

20

您可以添加自定义的方法检查用户名和电子邮件值和该字段添加验证。

演示 - http://jsfiddle.net/2hA8M/8/

实施例 -

方法 -

$.validator.addMethod("user_email_not_same", function(value, element) { 
    return $('#name').val() != $('#email').val() 
}, "* User and Email should not match"); 

验证 -

rules : { 
    username : { 
     user_email_not_same: true 
    } 
}, 
+0

非常感谢你,一般来说,这是可行的,但是我的问题是,当用户填写用户名(我的表单中的第一个字段)时,电子邮件字段仍然是空的,所以我试着将它转向: \t \t规则:{ \t \t \t用户名:{ \t \t \t \t需要:真, \t \t \t \t MINLENGTH:2, \t \t \t \t远程:“/ _misc/formcheck/usernam e.cfm “ \t \t \t}, \t \t \t电子邮件:{ \t \t \t \t需要:真, \t \t \t \t电子邮件:真, \t \t \t \t远程:”/ _misc/formcheck /电子邮件。CFM”, \t \t \t \t user_email_not_same:真 \t \t \t}, 不适合我这种工作方式,多了一个提示 – michbeck

+0

附演示它仍然应该如果空的工作就好像空的需要会。失败,即使验证是用值填入,值不应该与空值匹配。 – Jayendra

+0

非常感谢你,解决了:-) – michbeck

8

这可能是更灵活的:

$.validator.addMethod("notEqualTo", function (value, element, param) 
{ 
    var target = $(param); 
    if (value) return value != target.val(); 
    else return this.optional(element); 
}, "Does not match"); 

召唤:

rules: { 
    username: { 
     required: true, 
     minlength: 2, 
     remote: "/_misc/formcheck/username.cfm", 
     notEqualTo: "#emailId-or-anyValidJquerySelector" 
    } 
} 

样品:http://jsfiddle.net/4AdWR/1/

在HTML中

或者直接:

<input type="text" name="username" notEqualTo="#emailId-or-anyValidJquerySelector" minlength="2" class="required" /> 

样品:http://jsfiddle.net/B2hWn/1/

,这也尊重你必需/可选先前验证;)

+0

这真是太棒了,有没有办法在html属性中为notEqualTo设置验证消息? –