jquery - 太多的递归

时间:2011-06-06 22:16:16

标签: jquery recursion click

以下代码无效,并返回递归错误。我在这里查看了其他一些帖子,特别看到了一个(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>

3 个答案:

答案 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'));
});

See Fiddle