【问题标题】:jQuery onchange event fires twice in IE8jQuery onchange 事件在 IE8 中触发两次
【发布时间】:2011-08-10 09:24:18
【问题描述】:

我有以下代码:

<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”处理程序调用?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案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

      【讨论】:

      • 但在 Chrome 13 中,FF4 onchange 事件只触发一次。
      • @vasmt 那是你的跨浏览器脚本!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      相关资源
      最近更新 更多