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

lar*_*els 3 validation jquery jquery-validate

我正在使用Joern的jquery验证插件 1.6.

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

但是(至少在我的浏览器上(Linux上的Firefox 3.5.7)),如果我点击该字段,我只会获得所需的行为(即,一旦你关注它就会消失一个字段的错误消息); 它不处理tab键切换到字段正确.

示例代码:

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>
Run Code Online (Sandbox Code Playgroud)

JS:

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

    rules: {t1: {required: true, email:true}, t2: {required: true,email:true}}
});
Run Code Online (Sandbox Code Playgroud)

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

难道我做错了什么?

Nic*_*ver 8

你所经历的是正确的行为,可能有点违反直觉. 您可以在此处的演示中查看代码.当你点击,你注重文本框,但是当你标签你造成2个事件说事,你同时触发focusin keyup.

因为你正在触发正在keyup发生的事情是它正在清除错误,但是因为你在它们的框中键入了某些东西(它没有将tab与任何其他键区分开来,比如字母)......但是它会重新评估该框是否对每个都有效keyup,显示与之前相同的错误,因为该选项卡对此没有任何影响...因为它没有添加任何文本.

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

$("#abc").validate({
  focusCleanup: true,
  rules: {t1: {required: true, email:true}, t2: {required: true,email:true}},
  onkeyup: false,
});?
Run Code Online (Sandbox Code Playgroud)

为了比较,这是演示中的代码,因此您可以将其与上面的原始演示进行比较.