jquery validate:focusCleanup:true和focusInvalid:false不按预期工作

时间:2010-01-19 05:35:02

标签: jquery validation jquery-validate

我正在使用Joern的jquery validation plugin 1.6。

我的目标是具有以下行为:一旦用户将其聚焦,就删除元素的错误消息。根据我的理解设置'focusCleanup:true'应该照顾这个。

但是(至少在我的浏览器上(Linux上的Firefox 3.5.7)),如果我点击,我只会得到所需的行为(即,一旦你关注它就会消失一个字段的错误消息)进入田野;它无法正确处理标签

示例代码:

HTML:

   <form id='abc' name='abc'>
    <input type="text" id="t1" name="t1"/>
    <input type="text" id="t2" name="t2"/>
    <input type="submit" id="submit" value='submit'/> 
    </form>

JS:

   $("#abc").validate({
   focusCleanup: true,
   focusInvalid: false,

    rules: {t1: {required: true, email:true}, t2: {required: true,email:true}}
});

我设置'focusInvalid:false',因为文档说应该避免组合focusCleanup和focusInvalid;根据我的经验,评论这条线没有任何区别。

我做错了吗?

1 个答案:

答案 0 :(得分:8)

您所遇到的是正确的行为,可能有点违反直觉。 You can see your code in a demo here。当您点击时,您关注文本框,但是当您选择了两个重要事件时,您会同时触发focusin keyup

由于您正在触发keyup正在发生的事情 清除错误,但是因为您在框中键入内容(它不会将标签与其他标签区分开来)密钥,就像一个字母)...但是它重新评估该框是否在每个keyup上都有效,显示与之前相同的错误,因为标签对此没有任何影响...因为它没有添加任何文字。

如果要禁用onkeyup验证,它将停止这样做,如下所示:

$("#abc").validate({
  focusCleanup: true,
  rules: {t1: {required: true, email:true}, t2: {required: true,email:true}},
  onkeyup: false,
});​

For comparison, here's that code in a demo,因此您可以将其与上面的原始演示进行比较。