我有一个简单的新用户表单,其中包含一个“显示名称”输入字段,可触发对 blur() 事件的 ajax 调用。这是为了验证输入的值是否已存在于 DB 中。

例子:

 $("#displayname").blur(function() {
    //do something
 })

给出显示名称后,用户单击“提交”按钮继续进行,这是表单中的下一个即时操作。

例子:
$("#button").click(function() {
   $("#form").trigger("submit");
})

但是, blur() 事件总是首先触发,并且按钮点击未注册。只有在第二次单击按钮时,传播才会正确。这导致我的形式困惑。

当我单击按钮时,有什么方法可以抑制文本框的 blur() 事件?

谢谢你的任何帮助
干杯!

最佳答案

如果我理解正确的话,问题场景是 blur 是由单击按钮引起的。

幸运的是,事件信息被传递给处理程序,并且该事件应该包含一个 target 属性。由此,您可以推断是否对 blur 做一些事情。使用您最喜欢的 js 调试器在 blur 事件处理程序中停止并查看 target 属性上的内容。

$("#displayname").blur(function(evt) {
   if (evt.target is not the button){ // figure this out with debugger
      //do something

       return true; // I handled it
   }
   return false; // I didn't handle it
 })

但是,在这种情况下,您不会动态检查该字段中的任何内容不在数据库中。

@eZakto 有一个很好的建议,即在对您的输入进行 ajax 检查之前禁用提交按钮。

关于jQuery 模糊和提交传播问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8079772/

10-11 18:17