使用jQuery验证插件:onfocusout,onkeyup在生产站点上按预期工作

Cha*_*ntz 18 javascript validation jquery jquery-plugins jquery-validate

我正在使用jQuery Validate插件 v.1.9.0它非常好用.但是我遇到这个问题,一旦用户提交表单并且如果有任何错误,它就会正确显示错误消息.问题是,如果用户采取措施来纠正该错误,它不会更新消息.例如,如果需要字段,则在第一次收到消息时,用户开始键入,然后该消息应该消失.

在文档中,它提到onfocusoutonkeyup用于此目的,默认情况下它们设置为true.有趣的是它似乎在我的本地工作站上工作,但是一旦我将代码上传到生产站点,它就会失败(默默地).我以为我在某种程度上弄得很糟糕,所以我解雇了jsfiddle并放了相关的代码,看看它是否也在那里发生.

我很惊讶地看到它也发生在那里.所以我的问题是为什么它可以在我的本地机器上运行而不在生产站点上运行?

PS自包含示例http://jsfiddle.net/tankchintan/cge44/5/

UPDATE

要复制这个问题,请 -

  1. 转到jsfiddle页面.
  2. 没有填写任何字段命中提交表单.
  3. 它将显示除每个字段之外的错误消息.
  4. 现在开始输入任何一个字段.
  5. 您会注意到,即使规则已满足,错误消息也不会消失.在我的本地机器上,一旦我在现场输入任何内容,错误消息就会消失.

小智 31

改用它!

onkeyup: function(element) { $(element).valid(); },
onfocusout: function(element) { $(element).valid(); },
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,解决了我的问题!插件的延迟验证应该是一个设置,因此如果需要,可以快速验证字段. (3认同)
  • 在1.13.1版本中对我不起作用 (3认同)

nua*_*der 16

这个问题甚至存在于JQuery网站上的一些示例中.

我发现当input元素没有类型时会出现问题.Web浏览器假设类型为"text"(如果未指定),但jquery.validate存在问题.您的input元素应如下所示:

<input id="cname" name="name" type="text" class="required" minlength="2" />
Run Code Online (Sandbox Code Playgroud)

  • 编辑:这解释了行为,文档声明"在字段被标记为无效之前,验证是懒惰的:在第一次提交表单之前,用户可以通过字段标记而不会收到烦人的消息 - 他不会被窃听在他有机会真正输入正确的价值之前 (4认同)
  • 我的所有输入都指定了类型,我遇到了同样的问题.如果我开始键入它,则在我单击输入(模糊)之前不会触发验证器.但是当我返回输入并输入时,键盘在此后的每次击打后按预期运行.它只是第一个没有按预期工作的点击/类型.将不得不手动添加onkeyup事件以重新触发验证器...令人失望. (2认同)