jQuery模糊并提交传播问题

时间:2011-11-10 12:51:14

标签: jquery blur

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

示例:

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

一旦显示名称,用户点击“提交”按钮继续进行,这是表格中的下一个立即行动。

示例:

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

但是,模糊()事件始终会触发,并且未注册按钮单击。只有在第二次单击按钮时,传播才会正确。这导致我的形式出现混乱。

当我点击按钮时,有没有办法抑制文本框的blur()事件?

感谢您提供任何帮助 干杯!

2 个答案:

答案 0 :(得分:3)

如果我理解正确,问题的情况是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检查完成。

答案 1 :(得分:1)

您正在寻找' event.relatedTarget'。对于focusOut或blur事件,这将设置为接收焦点的元素,因此您知道模糊是由单击提交按钮而不是任何其他事件引起的。

$("#displayname").blur(function(event) {
    if (event.relatedTarget && (event.relatedTarget.id === 'button')){
        $("#button").trigger('click');
    }
    else {
        // do blur stuff here 
    }
});