事件覆盖jQuery UI事件的onBlur事件

3
我有一个文本框,使用jQuery UI 1.8.4自动完成进行了连接。我已经将选择事件连接起来,这样当用户从列表中选择项目时,它会调用另一个JavaScript函数,该函数发出ajax请求以保存数据并更新XML文档。
在同一个文本框上,有一个onBlur事件,以便如果用户手动输入数据并在没有选择自动完成项的情况下切换文本框,它也会执行更新操作。
当用户从自动完成列表中选择项目时,它会导致onBlur触发,覆盖了选择事件,因此只有用户键入的文本框中的内容得到更新,而由于选择事件不触发,文本框的内容不会得到更新。
我尝试使用相同结果的更改事件。
是否有一种方法可以确保选择事件被触发,并实现一些功能,以模拟用户键入值而不是选择值的情况下的onBlur?

你尝试过在调用.autocomplete()之后绑定blur事件吗? - Nick Craver
从自动完成列表中选择某个内容的简单操作会导致 onBlur 事件触发。 - David Good
我理解,但两者都是事件处理程序,它们按绑定顺序执行 :) - Nick Craver
谢谢!你的建议让我找到了解决问题的方法。 - David Good
2个回答

0
我认为onselect事件总是会被触发,但它只有在文本框的onblur事件之后才会被触发。
这种情况只会在您使用鼠标选择自动完成项目时发生,而不是通过键盘选择项目。
您可以根据鼠标单击或键盘选择来撤消对onblur事件所做的更新。
select: function (event, ui) {

     if (event.originalEvent.originalEvent.type == 'click') {
          //undo the onblur event happened by an ajax call here
          //$("#txtbox").val() will still be available to do an undo
     }

     //do the actual onselect function here
}

0
问题在于当用户与自动完成菜单交互时,文本框失去焦点并触发模糊事件。除非组件告诉您,否则没有真正的方法来检测用户是否在自动完成控件中。
如果您使用的自动完成控件没有方法告诉您何时关闭,那么您可能只能使用setTimeout等待一段时间,然后再执行代码。

我使用了两种响应的组合。我以不同的顺序绑定了事件,这在某种程度上起作用了。这些事件调用了另一个使用AJAX的方法。由于现在两个事件都在触发,外部脚本(不是我的)会出现未准备好的错误。我使用了setTimeout来防止它们相互干扰,同时发出请求。非常感谢你们俩!!! - David Good

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接