完整性检查:使用键盘更改事件不是第一次触发

mac*_*ca1 2 jquery bug-tracking dom internet-explorer-6

我已经对此做了大量的研究并发现了一堆报告的问题和解决方案,但普遍的共识似乎是IE6中的所有更改问题都在jQuery 1.4.2中得到修复.

我遇到的问题是jQuery 1.4.2中没有触发更改事件,但它在jQuery 1.3.2中成功触发.这是在IE6中.

我准备为此提交一个错误,但为了我的理智,我想首先在这里发布它,看看是否有一些我不知道的愚蠢.我不明白为什么这样做......

<HTML>
<HEAD>
<TITLE>jQuery 1.4.2 Problem </TITLE>

<script src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script>
    $(document).ready( function() {
        $("#firstBox").change(function() {
            alert("CHANGE");
        });

        // ONLOAD of document autofocus into the first element...
        $("form").find(":input:visible:first").focus()
    });
</script>
</HEAD>

<BODY>
<form>

<select id="firstBox">
<option value="" selected="selected">--</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>

<br><br>

<input size="10" id="secondBox">

</form>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)

很简单吧?在页面上加载,给出第一个元素焦点.第一个元素的Onchange,警告.

如果您使用鼠标,它按预期工作.页面加载,焦点在下拉,您更改选项,您获得警报.

问题是如果你使用键盘.页面加载,焦点在下拉列表中,按下向下箭头.选项更改.关闭该字段,没有警报.奇怪的.为了使它更奇怪,如果你回到字段并再次更改它(全部使用键盘),更改事件将在此时标签之后触发.

有任何想法吗?

mac*_*ca1 6

我决定应用此修复程序,它的工作原理:

$(function() {
    $("select").keyup(function () {
        $(this).triggerHandler("change")
    });
});
Run Code Online (Sandbox Code Playgroud)

原因是我们的应用程序已经使用IE6一段时间,用户用于选择立即触发更改(字段隐藏/显示)的框.这实现了这一点.

谢谢你的建议