【发布时间】:2010-08-13 01:28:54
【问题描述】:
我一直在调查浏览器之间的事件触发顺序,因为我们的应用程序遇到了一些异常行为。
我创建了一个小测试来查看三个事件的顺序:change、keydown 和 keypress。
这是 HTML (test.html):
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script src="test.js"></script>
</head>
<body>
<input type="text" id="TextBox" />
<input type="button" id="Button" value="Clear Results"/>
<hr />
<table id="ResultTable" style="width: 100px">
<tr><th>Results</th></tr>
</table>
</body>
</html>
这里是 JS (test.js):
/*
Appends event information to display table.
*/
$(document).ready(function() {
$("#TextBox").change(function() {
$("<tr><td>Change</td></tr>").appendTo("#ResultTable");
});
$("#TextBox").keydown(function() {
$("<tr><td>Key down</td></tr>").appendTo("#ResultTable");
});
$("#TextBox").keypress(function() {
$("<tr><td>Key press</td></tr>").appendTo("#ResultTable");
});
$("#Button").click(function() {
$("#ResultTable").empty();
$("<tr><th>Results</th></tr>").appendTo("#ResultTable");
});
});
当我在文本框中输入字母 f,然后按 Enter 键时,我在 Internet Explorer 8 中得到以下信息:
结果
- 按下键
- 按键
- 改变
- 按下键
- 按键
但在 Firefox (3.6.8) 中,我得到以下信息:
结果
- 按下键
- 按键
- 按下键
- 按键
- 改变
change 事件的顺序很重要,因为我们在 keydown 事件中捕获了 enter 键,但对 change 事件进行了一些验证。
我环顾四周,但无法确定问题出在哪里。
这是预期的行为吗?
所有浏览器都应该按指定顺序触发 jQuery 事件吗?
还是我们应该删除所有关于事件触发顺序的假设?
还是有其他事情妨碍了我的思考?
【问题讨论】:
-
我很惊讶这还没有答案,因为我认为这是 IE 的有趣行为。也许 IE 有太多有趣的行为。
-
我可以确认 IE9 在这方面的行为与 IE8 相同。
标签: jquery