jQuery验证 - 在用户输入输入和字段模糊至少一次之前不要验证

时间:2012-11-09 21:24:05

标签: jquery jquery-validate

如果你看一下这个表格: http://docs.jquery.com/Plugins/Validation#Example

您会注意到一个问题:在任何文本框中输入单个击键后,它会立即触发字段验证。例如,如果您开始在电子邮件字段中输入内容,则在单次击键后,您将收到验证错误。

这似乎与示例表单下面的描述性文本直接矛盾,后者说:

  

在字段被标记为无效之前,验证是懒惰的:在第一次提交表单之前,用户可以通过字段标记而不会收到恼人的消息 - 在他有机会实际进入之前,他不会被窃听正确的值

     

一旦字段被标记为无效,就会热切地验证:一旦用户输入了必要的值,就会删除错误消息

     

如果用户在未标记的字段中输入内容,并且标签/点击远离它(模糊字段),则会进行验证 - 显然用户有意输入内容但未能输入正确的值< / p>

这描述了期望的行为 - 在用户提交表单之前没有“恼人的错误消息”或b)将数据输入字段并使字段模糊。但是在演示中实际发生的是在第一次击键后触发验证,而不是在场模糊之后触发验证。因此,用户被“烦人的错误消息”轰炸,这使他分散了他正在做的事情。我们想要快乐的用户,而不是烦恼的用户: - )

如何获得文本中描述的行为,而不是演示中的行为?

谢谢!

-Josh

2 个答案:

答案 0 :(得分:0)

默认行为是进行实时验证。要覆盖它,只需添加一个参数

onkeyup:像这样的假

 $(document).ready(function(){
    $("#commentForm").validate({
      "onkeyup":false
      });
  });

这是demo

答案 1 :(得分:0)

在我的情况下,只要您“输入”输入字段,我就不必做任何事情来阻止消息。

我正在使用表单验证jQuery插件。

以下是我的代码示例,它仅在您在输入中编写内容时进行验证。如果你写了一些东西,然后在那种情况下擦除它就会出现“必需的消息”字段:

Js摘录

 form2.validate({
                 rules: {
                    name: {
                      required: true,
                      minlength: 2,
                      maxlength: 50,
                    },

                    lastname: {
                      required: true,
                      minlength: 2,
                      maxlength: 50,
                    },
                        }
                  },

            highlight: function (element) { // hightlight error inputs
                $(element)
                    .closest('.help-inline').removeClass('ok'); // display OK icon
                $(element)
                    .closest('.control-group').removeClass('success').addClass('error'); // set error class to the control group
            },

            unhighlight: function (element) { // revert the change done by hightlight
                $(element)
                    .closest('.control-group').removeClass('error'); // set error class to the control group
            },
 });

然后,如果您想在输入中“登陆”时立即显示消息,您可以在焦点上进行验证:like in this jsfiddle example

<强>段

    onfocusout: function (element) {
       $(element).valid();
    },