web-dev-qa-db-fra.com

jQuery trop de récursion

J'essaie de sélectionner une case d'option quand je clique sur un LI. Mais je reçois l'erreur "trop ​​de récursivité".

Le code est:

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

Ceci utilise jQuery 1.4.2 et l'interface utilisateur 1.7.2.

31
Kevin Prince

lorsque vous cliquez sur () l'enfant input, l'événement bouillonne et re-déclenche le clic de la li (). Vous devez ajouter un .click () à la input et y faire event.preventBubble=true;, sinon vous devez simplement définir la propriété vérifiée au lieu de click()ing. 

31
MightyE

Oui, c'est l'événement qui bouillonne. L'événement bouillonne jusqu'à li

Vous devez juste faire ceci:

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

Ne pas ajouter plus d'événements ci-dessous, c'est désordonné

11
naugtur

Juste au cas où cela aiderait quelqu'un, ce message peut apparaître pour diverses raisons, comme décrit par d'autres contributeurs, il pourrait s'agir d'un cas de bulle même. Mais pour moi, c’était un bogue dans mon code qui entraînait un appel de fonction sans fin. Une fonction s’appelait elle-même, qui s’appelait elle-même encore, c’est-à-dire une récursion sans fin.

Donc, il suffit d’examiner votre code et de voir s’il existe une situation où jQuery tombe dans une boucle sans fin d’appel d’un bloc.

1
Souvik Ghosh

En tant que réponse générique - le problème semble être que jQuery a trop de travail à faire - c’est-à-dire parcourir en boucle des éléments etc. J'ai eu ce problème et lorsque j’ai inspecté la page dans Firebug, il y avait trop d’éléments que j’attendais de la part de jQuery. 

Dans le débogueur Javascript de Firefox, vous pouvez cliquer sur> à côté de l'erreur et cela vous donnera plus de détails sur ce qui la déclenche.

0
Ukuser32