2010-02-23 13 views
29

Ich versuche, eine Radio-Box auszuwählen, wenn ich auf eine LI klicke. Aber ich bekomme den Fehler "zu viel Rekursion".jQuery zu viel Rekursion

-Code ist:

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

Dies wird mit jQuery 1.4.2 und 1.7.2 UI.

Antwort

29

Wenn Sie .click() das Kind input, sprudelt das Ereignis und löst den li 's click() erneut aus. Sie müssen ein .click() zu dem input hinzufügen und event.preventBubble=true; in es tun, oder die überprüfte Eigenschaft statt click() einfach nur festlegen.

+0

verwenden voll ..... –

+0

[Pause zu diesem Fehler] ist ...; d && m.filter (b, a, 0!)}} "": Function (a, b, c) {var d, f = e ++, g = x; typeof b == "string" &&! l ... verursacht durch das gleiche Ereignis wie hier beschrieben? –

11

Ja, es ist Ereignis sprudelnd. Event Blasen bis zu li

Sie müssen nur dies tun:

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

Sie mehr Ereignisse, die nicht unter hinzufügen, es ist chaotisch

0

Als allgemeine Antwort - das Problem scheint, dass Jquery sein muss zu viel Arbeit zu tun - also durch Elemente usw. zu durchlaufen. Ich hatte dieses Problem, und als ich die Seite in Firebug inspizierte, gab es zu viele Elemente, die ich erwartete, jquery anzugehen.

In Firefox Javascript Debugger können Sie auf die> neben dem Fehler klicken und es gibt Ihnen mehr Details, was es auslöst.

0

Nur für den Fall, dass dies jemand hilft, kann diese Nachricht aus verschiedenen Gründen erscheinen, wie von anderen Mitwirkenden beschrieben, könnte es ein Fall von Even Bubble sein. Aber für mich war es ein Fehler in meinem Code, der zu einem nie endenden Funktionsaufruf führte. Eine Funktion nannte sich selbst, die sich selbst wieder nannte, mit anderen Worten - nie endende Rekursion.

Überprüfen Sie also einfach Ihren Code und sehen Sie, ob es eine Situation gibt, in der jQuery in eine nie endende Schleife des Aufrufs eines Blocks fällt. Sehr

Verwandte Themen