我一直在研究浏览器中的事件触发顺序,因为我们的应用程序出现了一些不寻常的行为。
我创建了一个小测试来查看这三个事件的顺序: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,然后按回车键,在Internet Explorer 8中会得到以下结果:结果
- Key down - Key press - Change - Key down - Key press
但在Firefox(3.6.8)中,会得到以下结果:
结果
- Key down - Key press - Key down - Key press - Change 由于我们在keydown事件中捕获回车键,然后使用change事件进行一些验证,因此change事件的顺序很重要。
我已经查看了一些资料,但还没有找到问题出在哪里。这是预期行为吗?所有浏览器都应该按特定顺序触发jQuery事件吗?还是应该删除事件触发顺序的所有假设?或者还有其他问题我没有考虑到吗?