小编Ind*_*rek的帖子

如果手动和以编程方式更改文本字段的值,是否应触发更改事件?

我有一个带有远程数据源的jQuery UI Autocomplete文本字段.自动完成的select事件有三件事:

  1. 使用从自动完成列表中选择的值更新文本字段的值
  2. 进行AJAX调用以将更多数据加载到页面中
  3. 将焦点移动到另一个文本字段(在上一步中创建)

文本字段还有一个change事件,用于删除上面步骤2中加载的数据并触发自动完成search事件.

这在IE中完美运行(使用版本9和10测试),但在Firefox中没有.当我从自动完成列表中进行选择时,永远不会显示额外数据(虽然分析网络流量显示正在进行AJAX调用)并且search触发了自动完成事件.我设法将问题跟踪到Firefox,change在上面的步骤3之后触发文本字段的事件,显然是因为我在文本字段中键入了一些内容以触发自动完成列表,尽管事实上文本字段后来以编程方式更新.

快速示例: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事件仅在手动更改值时触发,但是当手动和以编程方式更改值没有字段失去焦点时,正确的行为是什么?

此外,更重要的是,对于我的特定情况,如果Firefox的行为是正确的(或至少不正确),防止它的最佳方法是什么?change在从自动完成列表中选择了某些内容后,我不希望在以编程方式更改焦点时触发事件.

html javascript jquery

5
推荐指数
1
解决办法
1110
查看次数

标签 统计

html ×1

javascript ×1

jquery ×1