Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery验证插件:onfocusout、onkeyup在生产站点上未按预期工作_Javascript_Jquery_Jquery Plugins_Jquery Validate_Validation - Fatal编程技术网

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

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。有趣的是,它似乎可以在我的本地工作站上工作,但一旦我将代码上传到生产站点,它就会(无声地)失败。我以为我把事情搞砸了,所以我发了火,想看看它是否也发生在那里 我很

我使用的是v.1.9.0,它工作得非常好。但是我面临这个问题,一旦用户提交表单&如果有任何错误,它会正确显示错误消息。问题在于,如果用户采取措施纠正错误,它不会更新消息。例如,如果需要一个字段,在第一次收到消息时,用户开始键入,则该消息应消失

在文档中提到,onfocusoutonkeyup用于此目的&默认情况下,它们设置为true。有趣的是,它似乎可以在我的本地工作站上工作,但一旦我将代码上传到生产站点,它就会(无声地)失败。我以为我把事情搞砸了,所以我发了火,想看看它是否也发生在那里

我很惊讶地看到它也发生在那里。所以我的问题是,为什么它可以在我本地的机器上工作,而不能在生产现场工作

p.S.自足示例

更新

要复制该问题,请执行以下操作:-

  • 转到JSFIDLE页面
  • 不填写任何字段,点击提交表单
  • 它将在每个字段旁边显示错误消息
  • 现在开始输入任意一个字段
  • 您会注意到,即使满足规则,错误消息也不会消失。在我的本地机器上,一旦我在字段中键入任何内容,错误就会消失

  • 我认为默认行为是仅在字段验证时隐藏该消息,例如“请输入有效的电子邮件地址”在输入后消失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处理程序中,解决了一个非常棘手的异步事件问题。