我有三个Select2框。当我更改一个时,所有未点击的都需要重置。当我这样做,它会导致无限循环,我得到标题中列出的错误。我该如何解决这个问题?
var group = $(".searchgroup1");
group.on('change', function(){
var box = group.index($(this));
group.each(function(index){
if(box != index){
$(this).val(null).trigger("change"); // <-- this resets the <select>
//If I remove the code up here, the infinite loop disappears
}
});
});
答案 0 :(得分:4)
jQuery&#39; s trigger
(没有参数调用的click
)调用元素同步上的事件处理程序。由于您正在触发您正在处理的事件,因此您无需使用get-out子句以递归方式有效地调用事件处理程序,因此您的堆栈用完了。
以下证明回调是同步的:
$("#foo").on("click", function() {
log("Clicked");
});
log("Clicking");
$("#foo").click();
log("Done clicking");
function log(msg) {
$("<p>").text(msg).appendTo(document.body);
}
&#13;
<div id="foo"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
您可以通过将调用包装在setTimeout
:
var $this = $(this);
$this.val(null);
setTimeout(function() {
$this.trigger("change");
}, 0);