wake-up-neo.com

jQuery zu viel Rekursion

Ich versuche, ein Optionsfeld auszuwählen, wenn ich auf eine LI klicke. Aber ich bekomme den Fehler "zu viel Rekursion".

Code lautet:

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

Dies verwendet jQuery 1.4.2 und UI 1.7.2.

31
Kevin Prince

wenn Sie .click () die untergeordnete Variable input, sprudelt das Ereignis und löst erneut das click () der li aus. Sie müssen der Variable input ein .click () hinzufügen und dort event.preventBubble=true; ausführen oder die geprüfte Eigenschaft nur setzen, anstatt click()ing. 

31
MightyE

Ja, es sprudelt das Ereignis. Ereignisblasen bis zu li

Sie müssen nur das tun:

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

Fügen Sie keine weiteren Ereignisse hinzu, es ist unordentlich

11
naugtur

Für den Fall, dass dies jedem hilft, kann diese Nachricht aus verschiedenen Gründen auftauchen, wie von anderen Mitwirkenden beschrieben. Es könnte sich auch um eine gerade Blase handeln. Aber für mich war es ein Fehler in meinem Code, der zu einem unendlichen Funktionsaufruf führte. Eine Funktion rief sich selbst an, die sich selbst wieder aufrief, mit anderen Worten - eine nie endende Rekursion.

Also, überprüfen Sie einfach Ihren Code und sehen Sie, ob es eine Situation gibt, in der jQuery in eine unendliche Schleife des Aufrufens eines Blocks fällt.

1
Souvik Ghosh

Als generische Antwort - das Problem scheint zu sein, dass Jquery zu viel Arbeit hat - also Elemente durchlaufen usw. Ich hatte dieses Problem und als ich die Seite in Firebug untersuchte, gab es zu viele Elemente, die ich mit Jquery erwartete. 

Im Firefox-Javascript-Debugger können Sie auf das> neben dem Fehler klicken, und Sie erhalten genauere Informationen darüber, was den Fehler auslöst.

0
Ukuser32