我有一个使用jQuery UI 1.8.4自动完成连接的文本框。我将select事件连接起来,因此当用户从列表中选择一个项目时,它会调用另一个javascript函数,该函数发出一个ajax请求来保存数据并更新XML文档。
在同一个文本框中有一个onBlur事件,因此如果用户手动键入数据并在文本框中选项卡而不选择自动填充项目,它也会执行更新。
当用户从自动完成列表中选择一个项目时,它会导致onBlur触发,这会覆盖select事件,因此唯一获得更新的数据是用户键入的文本框中的任何内容,并且因为select事件不是触发文本框的内容不会更新。
我尝试使用具有相同结果的更改事件。
有没有办法确保select事件被触发,还有一些功能可以在用户键入值而不是选择它时模拟onBlur?
感谢。
答案 0 :(得分:0)
问题是当用户与自动完成菜单交互时,文本框失去焦点并且模糊事件触发。除非组件告诉您,否则无法真正检测用户是否处于自动完成控件中。
如果您使用的自动完成控件没有方法可以告诉您关闭它的时间,那么您可能会在使用setTimeout等待一段时间后再触发代码。
答案 1 :(得分:0)
我认为onselect总是被解雇 “BUT”仅在文本框的onblur事件后才会被解雇。
只有当您使用鼠标选择自动完成项目而不是通过键盘选择项目时才会发生这种情况。
您可以使用select事件撤消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
}