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.
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.
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é
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.
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.