Javascript 使用jQuery验证插件:onfocusout、onkeyup在生产站点上未按预期工作
我使用的是v.1.9.0,它工作得非常好。但是我面临这个问题,一旦用户提交表单&如果有任何错误,它会正确显示错误消息。问题在于,如果用户采取措施纠正错误,它不会更新消息。例如,如果需要一个字段,在第一次收到消息时,用户开始键入,则该消息应消失 在文档中提到,onfocusout和onkeyup用于此目的&默认情况下,它们设置为true。有趣的是,它似乎可以在我的本地工作站上工作,但一旦我将代码上传到生产站点,它就会(无声地)失败。我以为我把事情搞砸了,所以我发了火,想看看它是否也发生在那里 我很惊讶地看到它也发生在那里。所以我的问题是,为什么它可以在我本地的机器上工作,而不能在生产现场工作 p.S.自足示例 更新 要复制该问题,请执行以下操作:-Javascript 使用jQuery验证插件:onfocusout、onkeyup在生产站点上未按预期工作,javascript,jquery,jquery-plugins,jquery-validate,validation,Javascript,Jquery,Jquery Plugins,Jquery Validate,Validation,我使用的是v.1.9.0,它工作得非常好。但是我面临这个问题,一旦用户提交表单&如果有任何错误,它会正确显示错误消息。问题在于,如果用户采取措施纠正错误,它不会更新消息。例如,如果需要一个字段,在第一次收到消息时,用户开始键入,则该消息应消失 在文档中提到,onfocusout和onkeyup用于此目的&默认情况下,它们设置为true。有趣的是,它似乎可以在我的本地工作站上工作,但一旦我将代码上传到生产站点,它就会(无声地)失败。我以为我把事情搞砸了,所以我发了火,想看看它是否也发生在那里 我很
我认为默认行为是仅在字段验证时隐藏该消息,例如“请输入有效的电子邮件地址”在输入后消失foo@example.com我认为这是有道理的 见演示:
我认为您可能正在尝试做类似的事情:这个问题甚至存在于JQuery网站上的一些示例中 我发现当输入元素没有类型时会出现问题。如果未指定,Web浏览器会假定类型为“text”,但jquery.validate对此有问题。您的输入元素应如下所示:
<input id="cname" name="name" type="text" class="required" minlength="2" />
如果jQuery库太新,显然这不起作用。我也经历了同样的事情,从jqueryv1.7.2回滚到v1.3.2修复了这个问题 上的示例页面使用了1.3.2,但我不确定该破坏发生在jquery的哪个特定版本中。请改用它
onkeyup: function(element) { $(element).valid(); },
onfocusout: function(element) { $(element).valid(); },
以下是我的作品:
$(document).ready(function () {
$("#myFormElement").submit(function (event) {
var validator = $.data($('form')[0], 'validator');
validator.settings.onfocusout = function (element) { $(element).valid(); };
validator.settings.onkeyup = function (element) { $(element).valid(); };
});
var validator = $.data($('form')[0], 'validator');
validator.settings.onfocusout = false;
validator.settings.onkeyup = false;
});
这将禁用初始onkeyup验证。如果用户单击submit,我们将重新启用验证,以便在字段有效后立即向其提供反馈
我不确定为什么这些属性最初是布尔值,然后在提交事件上回调。我只是通过在submit事件中将属性设置为true来找到该方法,这导致验证库中出现异常(正在尝试调用函数)。感谢您的响应。事实上,我正试图做的正是你发送的演示链接中发生的事情。我只希望在用户采取相应操作后,错误消息的默认/标准行为消失。您还可以从我发送的JSFIDLE链接中看到这一点。这对我很有用。。。有几个输入元素缺少类型。一旦我添加了它,验证就可以在这些元素上完美地工作。不确定为什么没有选择此选项作为答案。我的所有输入都指定了类型,我遇到了相同的问题。如果我开始输入,它不会触发验证器,直到我点击关闭输入(模糊)。但当我返回到输入和类型时,keyup在此后的每一次笔划后都会按预期进行操作。这只是第一次单击/键入,但没有按预期工作。必须手动添加onkeyup事件以重新触发验证器。。。令人失望的编辑:这就解释了这种行为,文档状态是“在字段被标记为无效之前,验证是惰性的:在第一次提交表单之前,用户可以在字段中进行制表,而不会收到恼人的消息-在他有机会实际输入正确的值之前,他不会被窃听”^c在id属性中的意义是什么?谢谢,修复了我的问题!插件的延迟验证应该是一个设置,所以如果需要字段可以快速验证。这对我来说是一个非常简单的解决方案。我的问题是,我已经有一个focusout处理程序正在修改输入的值。设置onfocusout:false选项,并将.valid()调用添加到我自己的focusout处理程序中,解决了一个非常棘手的异步事件问题。