【问题标题】:Jquery Validation doesn't validate when input is removed删除输入时,Jquery Validation 不验证
【发布时间】:2015-10-14 19:14:44
【问题描述】:

我有一个使用 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: "demo@somewhere.com",
            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."
    }
});

提前感谢您的任何建议。

【问题讨论】:

  • 随机删除任何输入值似乎都可以正常工作。你有确切的情况吗?
  • 当我填写每个字段,然后删除重新输入的密码,然后删除姓氏时,这种情况一直发生在我身上。我也在 Chrome 中这样做。
  • 你的小提琴工作正常。
  • 你的小提琴也适合我。虽然,您对depends 属性的使用非常不寻常。我怀疑这是您问题的根源。
  • 我仍然看到这个问题,但它现在似乎是间歇性的。在这里,我删除了@Sparky 关注的depends 属性,但我仍然看到了问题。我应该注意我从不点击提交按钮。填写所有字段,然后取出一些随机字段。 New Fiddle

标签: javascript jquery forms jquery-validate


【解决方案1】:

引用 OP 的评论:

我应该注意我从不点击提交按钮。填写所有字段,然后取出一些随机字段。

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

documentation:

在一个字段被标记为无效之前,验证是惰性的:在第一次提交表单之前,用户可以在字段之间切换而不会收到烦人的消息——他们在有机会实际输入之前不会被窃听正确的值

【讨论】:

  • 这是有道理的。我绝对误解了默认行为并认为这是一个问题。感谢您的解释和文档链接。
猜你喜欢
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多