【问题标题】:jQuery change event being called twicejQuery 更改事件被调用两次
【发布时间】:2011-07-24 19:05:52
【问题描述】:

我有一个带有一些输入框和选择框的表单,每个框都有class="myClass"。我也有以下脚本:

$(document).ready(function() {
    $(".myClass").change(function() {
        alert('bla');
    })
});

我不明白为什么每次更改选择框或输入框后,都会调用此函数两次。 这里有什么问题?

感谢您的帮助!

【问题讨论】:

  • 正如 fl00r 所指出的,查看更多代码会很有帮助。双重函数调用通常是无意中附加处理程序两次的症状。
  • 谢谢你,Uberstein 刚刚向我展示了我的错误

标签: javascript jquery html onchange


【解决方案1】:

我能想到的只是您在表单本身上使用了相同的类。如果是这样,请从您的表单标签中删除 myClass 样式。

更正: http://jsfiddle.net/rY6Gq/1/

带有双重警报的故障之一: http://jsfiddle.net/rY6Gq/

【讨论】:

  • 检查是否已创建两个事件侦听器是个好主意。如果代码运行了两次,或者该文件在页面上被包含两次,则该事件将发生两次。
  • @RaisinBranCrunch 感谢您的提示。我的问题是该文件被包含了两次。
【解决方案2】:

e.stopImmediatePropagation();对我有用。

$(document).ready(function() {
    $(".myClass").change(function(e) {
        e.stopImmediatePropagation();
        alert('bla');
    })
});

【讨论】:

  • 我不知道为什么会发生这种情况(“更改”事件被触发两次),但我知道您的解决方案对我有用!
  • 它就像一个魅力!
【解决方案3】:

这是一个错误, 你会添加

$("#some_id").unbind('change');

在任何更改调用之前

【讨论】:

    【解决方案4】:

    当您绑定的同一个类或任何属性也具有相同名称的父级或子级时,就会发生这种情况。显然,当你改变一个孩子时,父母也会改变(它的孩子改变)。如果它们具有相同的类或属性,则应该触发两次。 例如,在下面如果你绑定到“myClass”,它会被调用两次。

    <div class="myclass">
    <select class="myClass">   </select>
    </div>
    

    【讨论】:

    • 非常感谢。因为这是一个解决方案。在我的例子中,selectpicker 生成了一个与我的初始选择标签具有相同类的 div。
    【解决方案5】:

    如果这发生在 IE 中,可能是这个错误,因为它对我来说是: http://bugs.jquery.com/ticket/6593

    更新到 jQuery 1.7.1 对我有用。

    【讨论】:

      【解决方案6】:

      这样改

      $(document).ready(function() {
          
          $(".myClass").unbind('change');
      
          $(".myClass").change(function() {
              alert('bla');
          })
      });
      

      【讨论】:

        【解决方案7】:

        【讨论】:

          【解决方案8】:

          唯一对我有用的是在更改检查之前解除绑定。

           $(".select2Component").unbind(); 
              $(".select2Component").change(function() { 
                   //code
              });
          

          【讨论】:

            【解决方案9】:

            对我来说 - 我在函数中编写了 on change event。 将其移至 $(document).ready(function () {}); 解决了我的问题。

            【讨论】:

              【解决方案10】:

              尝试在 Firebug 中调试代码而不是发出警报。当没有发生两个变化时,它可能会失去焦点并返回它会导致出现两个变化

              【讨论】:

              • 另外我知道这发生在一个朋友身上,但我不确定他当时使用的是什么浏览器
              猜你喜欢
              • 1970-01-01
              • 2020-01-31
              • 1970-01-01
              • 2022-01-19
              • 1970-01-01
              • 1970-01-01
              • 2011-03-05
              • 2016-12-16
              • 2011-10-05
              相关资源
              最近更新 更多