以下代码无效,并返回递归错误。我在这里查看了其他一些帖子,特别看到了一个(http://stackoverflow.com/questions/639862/too-much-recursion-error-in-jquery-1-3-2)我认为会帮助我,我调整了我的代码,但我猜我没有得到原则,因为我仍然得到错误......
//Note - can't use radios... must use checkboxes
$('div.divCheck').click(function() {
var testEv = $(this).find('input').attr("id");
$(this).children('div').toggleClass('selected');
$("input#"+testEv).click();
});
HTML:
<div class="divCheck clearfix">
<div class="checkboxArea1 unselected">
<input type="checkbox" id="pqrs">
<label class="filterlabel pqrCheckbox">PQR</label>
</div>
</div>
答案 0 :(得分:1)
您遇到事件冒泡。你有一个绑定到CheckBox的click事件的函数吗?看起来CheckBox的click事件冒泡回到包含它的div,这导致循环递归。我会考虑将div click处理程序的最后一行更改为$('input#' + testEv).attr('checked', 'checked');
之类的内容。您也可以在CheckBox的单击处理程序中使用StopPropagation。
答案 1 :(得分:0)
我认为问题在于click事件正在向DOM树上传播,因此click事件处理程序正在调用自身,从而导致错误。试试这个:
$('div.divCheck').click(function(e) {
var testEv = $(this).find('input').attr("id");
$(this).children('div').toggleClass('selected');
$("input#"+testEv).click();
e.stopPropagation();
});
答案 2 :(得分:0)
如果您只是想检查复选框,则可以使用jQuery prop
函数。
$('div.divCheck').click(function() {
var testEv = $(this).find('input').attr("id");
$(this).children('div').toggleClass('selected');
var $elm = $("input#"+testEv);
$elm.prop('checked', !$elm.prop('checked'));
});