2010-02-23 198 views
29

我试图选择一个单选框时,我点击一个李。但我得到的错误“多递归”。jQuery太多递归

代码是:

$('li').click(function(){ 
    $('li.selected').removeClass('selected'); 
    $(this).addClass('selected'); 
    $(this).children("input[type=radio]").click(); 
}); 

这是使用jQuery 1.4.2和1.7.2的用户界面。

回答

29

当你点击()孩子input时,事件冒泡并重新触发li的click()。您需要将.click()添加到input,并在其中执行event.preventBubble=true;,否则只需设置已选中的属性而不是click()即可。

+0

Very use full ..... – 2011-09-17 10:11:45

+0

is [Break On This Error] ...; d && m.filter(b,a,!0)}},“”:function(a,b,c) {var d,f = e ++,g = x; typeof b ==“string”&&!l ... 引起的同一个事件在这里描述? – 2012-10-10 17:32:58

11

是的,这是事件冒泡。事件冒泡李

你只需要做到这一点:

$('li').click(function(e){ 
    if($(e.target).is('li')){ 
    $('li.selected').removeClass('selected'); 
    $(this).addClass('selected'); 
    $(this).children("input[type=radio]").click(); 
    } 
}); 

不要添加下面更多的事件,它的混乱

0

作为一个通用的答案 - 这个问题似乎是jQuery有太多的工作要做 - 即循环元素等。我遇到了这个问题,当我检查萤火虫中的页面时,我期望jquery处理的元素太多了。

在Firefox的Javascript调试器中,您可以单击>旁边的错误,它会给你更多的细节,以触发它。

0

为了防止这种情况对任何人有用,此消息可能出于各种原因显示,如其他贡献者所述,这可能是Even bubble的情况。但对我来说,这是我的代码中的一个错误,导致了一个永无止境的函数调用。一个函数正在调用自己,换句话说就是再次调用自己 - 永不结束递归。

所以,只要检查你的代码,看看是否有这样一种情况,jQuery陷入了调用某个块的永无止境的循环。