2010-02-23 82 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陷入了調用某個塊的永無止境的循環。