首页 > 解决方案 > 如何使用 JQuery UI 自动完成阻止事件在 IE11 中传播?

问题描述

我正在使用 jquery-ui-1.8.21 自动完成库为表单中的字段创建下拉列表。自动完成带有 2 个事件处理程序,“选择”和“更改”。

当用户从下拉列表中选择一个项目时,它会触发“选择”事件、填充字段、向字段添加文本(我们称之为字段 B)以及其他事情。当用户取消关注某个字段时,如果字段中的值发生更改,则会触发“更改”事件,将文本添加到字段 B。

我的问题是,当用户在下拉列表中选择一个项目然后取消焦点时,它会触发“选择”和“更改”事件,将文本添加到字段 B 两次。我只想触发选择事件以便添加一次文本。出于某种原因,这两个事件仅在我单击下拉菜单时触发,当我使用键盘选择时,仅触发“选择”。

select: function (event, ui) {
    console.log("select function")
    //other stuff
    event.preventDefault();
    event.returnValue = false;
}

change: function (event, ui) {
    console.log("change function")
    //other stuff
}

我已经尝试过event.preventDefault, event.returnValue,在每个组合中都使用window.eventand event.originalEvent(因为 JQuery 创建了自己的事件),并且return false它们都没有阻止“更改”事件的触发。

有趣的是,所有这些事件都被event.cancelable认为event.isDefaultPrevented是真实的,所以它应该被取消,但事实并非如此。

我怎样才能让它工作?

这只是 IE11 中的一个问题,在 Chrome 中event.preventDefault可以正常工作。

标签: javascriptjqueryautocompleteevent-handlinginternet-explorer-11

解决方案


推荐阅读