jQuery更改事件被调用两次

时间:2011-03-28 20:27:03

标签: javascript jquery html onchange

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

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

我不明白为什么在选择框或输入框中的每次更改后,此函数被调用两次。 这有什么不对?

感谢您的帮助!

10 个答案:

答案 0 :(得分:42)

我能想到的是你在表单上使用了同一个类。如果是这样,请从表单标记中删除myClass样式。

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

有双重警报的错误: http://jsfiddle.net/rY6Gq/

答案 1 :(得分:20)

e.stopImmediatePropagation();对我有用。

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

答案 2 :(得分:9)

这是一个bug, 你要添加

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

在任何变更电话之前

答案 3 :(得分:3)

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

更新到jQuery 1.7.1对我有用。

答案 4 :(得分:3)

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

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

答案 5 :(得分:1)

改成这样

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

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

答案 6 :(得分:0)

答案 7 :(得分:0)

对我唯一有用的一个是在更改检查之前取消绑定。

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

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

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