我有一个带有远程数据源的jQuery UI Autocomplete文本字段。自动填充的select
事件有三件事:
文本字段还有一个change
事件,用于删除上面步骤2中加载的数据并触发自动填充的search
事件。
这在IE中完美运行(使用版本9和10测试),但在Firefox中没有。当我从自动完成列表中进行选择时,永远不会显示额外数据(虽然分析网络流量显示正在进行AJAX调用)并且触发了自动完成的search
事件。在上面的步骤3之后,我设法将问题跟踪到Firefox触发文本字段的change
事件,显然是因为我在文本字段中输入了一些内容以触发自动完成列表,尽管文本字段后来更新了编程。
简单示例:http://jsfiddle.net/2umrJ/1
(为简洁起见,该示例仅在文本字段中使用keyup
事件。)
IE10中的输出:
input1.focus()触发了 input1.blur()触发了 input2.focus()触发
Firefox 20中的输出:
input1.focus()触发了 input1.change()触发了 input1.blur()触发了 input2.focus()触发
可以看出,Firefox不会触发change
事件,而IE则不会触发change
事件。现在我知道默认情况下(即没有任何额外的代码),change
事件仅在手动更改值时触发,但是当手动和以编程方式更改值时,正确的行为是什么没有领域失去焦点?
另外,更重要的是,对于我的特定情况,如果Firefox的行为是正确的(或者至少不正确),那么防止它的最佳方法是什么?在我从自动完成列表中选择了某些内容后,我不希望在以编程方式更改焦点时触发{{1}}事件。
答案 0 :(得分:3)
为了防止在firefox中触发更改事件,我会在你的逻辑中设置一个变量来说明它是以编程方式进行更改的,并且在更改事件逻辑中,你应该检查该变量,如果没有执行更改逻辑,它以编程方式触发,并在退出前重置变量。