Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 两次调用jQuery更改事件_Javascript_Jquery_Html_Onchange - Fatal编程技术网

Javascript 两次调用jQuery更改事件

Javascript 两次调用jQuery更改事件,javascript,jquery,html,onchange,Javascript,Jquery,Html,Onchange,我有一个带有一些输入框和选择框的表单,每个框都有class=“myClass”。我还有以下脚本: $(document).ready(function() { $(".myClass").change(function() { alert('bla'); }) }); 我不明白为什么每次更改选择框或输入框后,这个函数都会被调用两次。 这里怎么了 谢谢你的帮助 不是:尝试在Firebug中调试代码,而不是发出警报。它可能会失去焦点并返回,当没有两个发生时,它会导致

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

$(document).ready(function() {
    $(".myClass").change(function() {
        alert('bla');
    })
});
我不明白为什么每次更改选择框或输入框后,这个函数都会被调用两次。 这里怎么了


谢谢你的帮助

不是:

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

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

更正:

带有双重警报的故障:

如果这发生在IE中,可能是这个bug,就像我遇到的一样:


更新到jQuery 1.7.1对我来说很有效。

当同一个类或绑定的任何属性也具有相同的名称parent或child时,就会发生这种情况。显然,当您更改一个子项时,父项也会更改(其子项也会更改)。如果它们具有相同的类或属性,则应该触发两次。
$(document).ready(function() {
    $(".myClass").change(function(e) {
        e.stopImmediatePropagation();
        alert('bla');
    })
});
例如,在下面的示例中,如果绑定到“myClass”,它将被调用两次

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

这是一个bug, 你会加上

$("#some_id").unbind('change');
在任何更改调用之前

e.停止立即复制();这对我来说很有用

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

唯一对我有效的方法是在更改检查前解开绑定

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

对我来说,我在一个函数中编写了关于更改事件的
。
将其移动到
$(document.ready)(函数(){})解决了我的问题。

像这样改变

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

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

另外,我知道这件事发生在一位朋友身上,但我不确定他当时使用的浏览器是什么,正如fl00r所指出的,如果能看到更多的代码,那会很有帮助。双函数调用通常是无意中附加处理程序两次的症状。谢谢,Uberstein刚刚向我展示了我的错误。非常感谢。因为这是一个解决办法。在我的例子中,selectpicker生成了一个div,它的类与我最初的select标记上的类相同。如果代码运行了两次,或者文件在页面上包含了两次,则事件将发生两次。@RaisinBranCrunch感谢您的提示。我的问题是该文件包含了两次。