2010-03-07 3 views
1

Je suis la capture d'un clic sur un LI donné:jQuery event bubbling: comment capturer un clic imbriqué?

<ul> 
    <li class="opt">Text 1</li> 
    <li class="opt">Text 2</li> 
</ul> 

Avec le code:

$('.opt').live('click', function(event) { 
    console.log("Click!"); 
} 

et il fonctionne à merveille :) Cependant, je dois aussi soutenir la capacité de bloc imbriqué éléments à exister à l'intérieur du LI, sans changer mon code javascript. Le javascript ci-dessus ne pas feu lorsque le texte 1 clic dans ce cas:

<ul> 
    <li class="opt"> 
     <div> 
      <div> 
       <span>Text 1</span> 
      </div> 
     </div> 
    </li> 
</ul> 

J'ai lu que les événements jQuery « bulle up » dans les DOM, mais malheureusement pas de bouillonnement se produit ici. Quel est le moyen le plus propre de capturer un événement click dans un LI quand je ne suis pas sûr de ce que d'autres éléments pourraient contenir?

Répondre

1

Vous avez besoin d'un point sur ce sélecteur de classe, alors il devrait fonctionner:

$('.opt').live('click', function(event) { 
    console.log("Click!"); 
} 

À moins que vous faites quelque chose d'anormal (par exemple .stopPropogation() sur un enfant cliquée), l'événement devrait bouillonner jusqu'à tout seul .

+0

Ma faute - J'ai le point là dans mon code, mais je l'ai perdu en traduction. Même avec cela, mon événement ne semble pas tirer quelques couches vers le haut. –

+0

@Tom - Il se déclenche bien dans tous les tests ... il y a quelque chose d'autre, avez-vous une page de test que je peux regarder? –

+0

Oh mon est-ce jamais un moment facepalm. L'événement bouillonnait bien - c'était mon interprétation erronée de l'endroit où les points event.target ont causé l'arrêt de mon code. Pas une perte de temps totale, car je n'aurais pas trouvé cette erreur si ce n'est pas pour vos commentaires. Merci, Nick! –

1
$('.opt, .opt *').live('click', function(event) { 
    console.log("Click!"); 
} 
+0

Ce n'est pas une bonne idée, vous allez déclencher cet événement un * lot * de fois, 1 pour chaque élément imbriqué. –

Questions connexes