jQuery change事件被调用两次

46

我有一个表单,其中包含一些输入框和选择框,每个都具有class="myClass"。我还有以下脚本:

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

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

感谢您的帮助!


3
正如fl00r所指出的那样,看到更多您的代码将是有帮助的。双重函数调用通常是无意中两次附加处理程序的症状。 - Ender
1
谢谢,Uberstein 刚刚展示了我的错误。 - Israel
10个回答

52

最好检查是否已创建了两个事件监听器。如果代码运行了两次,或者文件在页面上被包含了两次,那么事件将会发生两次。 - RaisinBranCrunch
@RaisinBranCrunch 感谢你的提示。我的问题是文件被包含了两次。 - jaambros

50

e.stopImmediatePropagation(); 是对我起作用的。

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

2
我不知道为什么在我的情况下会发生这种情况(“更改”事件被触发两次),但我知道你的解决方案对我有效! - leo
2
它运行得非常好!! - lewishole

12

这是一个错误, 你需要添加

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

任何更改之前调用


5
当您绑定的同一类或属性名称也是父级或子级的名称时,就会发生这种情况。显然,当您更改一个子项时,父项也会被更改(其子项更改)。如果它们具有相同的类或属性,则应该触发两次。 例如,在以下示例中,如果您绑定到“myClass”,它将被调用两次。
<div class="myclass">
<select class="myClass">   </select>
</div>

1
非常感谢。对我来说这是一个解决方案。在我的情况下,selectpicker 生成了一个与我的初始 select 标签相同的类的 div。 - Viacheslav Yankov

3

1
改成这样:

像这样更改

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

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

1

对我来说 - 我已经在一个函数内写了on change事件。将其移动到$(document).ready(function () {});中解决了我的问题。


0

0
唯一对我有用的是在更改检查之前解除绑定。
 $(".select2Component").unbind(); 
    $(".select2Component").change(function() { 
         //code
    });

-1
尝试在 Firebug 中调试代码而不是弹出警告。它可能失去了焦点,返回它会导致出现两个更改时实际上只有一个更改发生。

我知道我的一个朋友遇到过这种情况,但我不确定他当时使用的是哪个浏览器。 - Scott Reed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接