2015-10-14 53 views
0

我有一个使用jQuery验证的表单,除了这一个问题,它工作得很好。要重现该问题,请填写表单中的所有字段,然后随机选择字段并删除输入。继续这样做,直到错误消息没有出现在顶部,那就是问题所在。Jquery验证不验证输入被删除

我不知道为什么它不会验证输入被删除时的字段。如果任何人都可以告诉我为什么这样做,那会很好。我无法在jquery validate网站上的任何演示中重现它,所以我认为它与我设置的方式有关。

JSFIDDLE

$.validator.addMethod("notEqual", function(value, element, param) { 
     return this.optional(element) || value != param; 
    }); 

$("#wizardForm").validate({ 
    rules: { 
     firstname: { 
      required:{ 
       depends:function(){ 
        $(this).val($.trim($(this).val())); 
        return true; 
       } 
      }, 
      pattern: /^[a-zA-Z]+([\s]+)?['-]?([a-zA-Z]+)?$/ 
     }, 
     lastname: { 
      required: { 
       depends:function(){ 
        $(this).val($.trim($(this).val())); 
        return true; 
       } 
      }, 
      pattern: /^[a-zA-Z]+([\s]+)?['-]?([a-zA-Z]+)?$/ 
     }, 
     email: { 
      required: { 
       depends:function(){ 
        $(this).val($.trim($(this).val())); 
        return true; 
       } 
      }, 
      email: true, 
      notEqual: "[email protected]", 
      pattern: /^(.)+(@)(.)+[.](.)+$/ 
     }, 
     password: { 
      required: true, 
      equalTo: { 
       param: "#PWconfirm", 
       depends: function(element) { 
        return $("#wizardForm #PWconfirm").val(); 
       } 
      } 
     }, 
     PWconfirm: { 
      required: true 
     }, 
     company: { 
      required: true 
     }, 
     zip: { 
      required: true 
     },   
     country: "required" 
    }, 
    errorLabelContainer: ".validation-error-msg", 
    wrapper: "li", 
    errorClass: "validation-error", 
    messages: { 
     firstname: { 
      required: "The 'First Name' field cannot be empty.", 
      pattern: "The 'First Name' field must not contain numbers or special characters." 
     }, 
     lastname: { 
      required: "The 'Last Name' field cannot be empty.", 
      pattern: "The 'Last Name' field must not contain numbers or special characters." 
     }, 
     email: { 
      required: "The 'Email Address' field cannot be empty.", 
      email: "The 'Email Address' must be in a valid email format.", 
      notEqual: "This email address is reserved, please use another.", 
      pattern: "The 'Email Address' must be in a valid email format." 
     }, 
     password: { 
      required: "The 'Password' field cannot be empty.", 
      equalTo: "Password fields do not match!" 
     }, 
     company: "The 'Company Name' field cannot be empty.", 
     zip: "The 'Zip Code' field cannot be empty.", 
     PWconfirm: "The 'Retype Password' field cannot be empty.", 
     country: "The 'Country' field needs a valid selection." 
    } 
}); 

先感谢您的任何意见。

+0

它似乎工作正常任何输入值被随机删除。发生时你有确切的情况吗? – DinoMyte

+0

当我填写每个字段时,对我来说这种情况非常一致,然后删除重新输入的密码,然后删除姓氏。我也在Chrome中执行此操作。 – Jmh2013

+0

你的小提琴工作正常。 –

回答

0

报价OP的评论:

我要指出,我从来没有点击提交按钮。填写所有字段,然后取出一些随机字段。

它被称为“懒惰验证”。这就是插件的设计原理。基本上,在第一次点击提交按钮之前,空字段的错误会被忽略。

documentation:场被标记为无效

之前,验证是懒惰:提交表单的第一次之前,用户可以通过标签领域没有得到恼人的消息 - 它们不会有机会实际输入正确的值之前得到窃听

+0

这是有道理的。我绝对误解了默认行为,认为这是一个问题。感谢您的解释和文档链接。 – Jmh2013