jQuery onchange事件在IE8中触发两次

时间:2011-08-10 09:24:18

标签: jquery internet-explorer internet-explorer-8 onchange

我有以下代码:

<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
</head>
<body>

    <script type="text/javascript">

        $(document).ready(function()
        {
            $('#test').bind("change", function()
            {
                alert(this.value);
                this.value = jQuery.trim(this.value);
            });
        });

    </script>

    <input type="text" id="test" />
    <br />
    <input type="radio" />
</body>
</html>

在IE8中,如果我输入任何文本以“测试”输入并按“Tab”,我将收到两次警告信息。

但如果我评论一行“this.value = jQuery.trim(this.value);”该消息只会显示一次。

为什么会这样?我怎么能避免两次“onchange”处理程序调用?

2 个答案:

答案 0 :(得分:3)

jQuery中已经报告了Issue,它已经使用最新的代码库修复了。 这是在jQuery 1.4 - 1.6.4上报告的。

答案 1 :(得分:2)

当您将表单元素的value属性设置为其他值时,change事件将触发。

所以,在你的代码中:

$('#test').change(function() {
    // This is executed whenever the `change` event fires
    // Setting a new value will trigger the `change` event again
    this.value = $.trim(this.value);
});

顺便说一句,您可能希望使用the input event代替change。有一个jQuery插件:https://github.com/mathiasbynens/jquery.oninput.js