我有一个包含一些输入和选择框的表单,每个表单都有class="myClass"
。我还有以下脚本:
$(document).ready(function() {
$(".myClass").change(function() {
alert('bla');
})
});
我不明白为什么在选择框或输入框中的每次更改后,此函数被调用两次。 这有什么不对?
感谢您的帮助!
答案 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中的代码而不是警报。它可能会失去焦点,并且当没有两个发生时返回它会导致两个变化的出现