6
votes

Est-ce que l'élément enfant enregistre un événement de clic avec un élément parent de jQuery?

Si j'ai une boîte de message flottante et que je vous demande si vous cliquez sur le texte du paragraphe dans cette case, vous enregistrez également un clic sur son élément parent de JQuery ou si je dois ajouter des auditeurs pour les éléments de l'enfant.

mise à jour: Voici la mise en page de base: xxx

maintenant si je clique sur le texte dans le

ou dans le va-t-il toujours déclencher en tant que clic sur $ ('# msgbox') ?

Mise à jour 2: < / forte> Puis-je arrêter ce comportement ??

Mise à jour 3: Voici le violon que j'ai allongé: Http:/jsfiddle.net/mztby/ - Il existe maintenant un moyen d'arrêter la propagation après avoir atteint un certain niveau? Ainsi, cliquez sur le

serait correct, mais en cliquant sur le ne ferait rien? - en quelque sorte comme $ ('# msgbox: nième enfant'). Cliquez sur (Fonction (E) {E.StopPropagation ();});


1 commentaires

Voici une deuxième pensée: Y a-t-il un moyen de l'empêcher si le texte à l'intérieur est dynamique?


3 Réponses :


2
votes

Par défaut, Events "Bubble" en JavaScript. Ils tirent au niveau que vous déclenchez puis une à la fois par des éléments parents.

Pour plus d'informations sur l'événement Boubillage: http://www.quirksmode.org/js/events_order .html

Pour arrêter: empêcher "Boubillage"?


1 commentaires

Génial merci pour la pointe et le lien.



3
votes

Si vous souhaitez l'arrêter de bulles d'utilisation

e.stopPropagation(); 


1 commentaires

impressionnant. Y a-t-il un moyen d'arrêter la propagation après avoir atteint un certain niveau? Ainsi, cliquez sur le

serait correct, mais en cliquant sur le ne ferait rien?



5
votes

Voici un exemple sur jsfiddle xxx

note qui clique sur sur le #msgbox

(c'est la case rouge dans le jsfiddle) ou sur la première section du texte du paragraphe déclenchera tous les deux le gestionnaire d'événements sur #msgbox; Mais en cliquant sur le texte à l'intérieur du ne sera pas. En effet, nous avons appliqué un gestionnaire directement à la portée et appelé stoppropagation () sur cet événement pour empêcher l'action de bouillonnée normale.

Mise à jour : Voici une mise à jour de votre violon qui montre la même chose. < / p>


4 commentaires

frais. Et si le contenu est dynamique, et je ne sais pas que c'est un qui est à l'intérieur?


Ensuite, donnez-lui un identifiant, un nom de classe ou la sélectionner d'une autre manière. Peu importe la manière dont vous faites l'objet JQuery - une fois que vous l'avez, liez un gestionnaire de clic et utilisez StopPropagation. Si vous ajoutez le contenu dynamique après vous liez vos événements, vous devez utiliser .Live (" Cliquez sur ", fonction (EVT) {...};) au lieu de .Cliquez sur (fonction (EVT) {...}) .


Ok ça a du sens, mais je ne suis pas certain de la manière dont je peux sélectionner "tous les arrière-petits-enfants", y a-t-il une fonction JQuery pour cela? - À la deuxième pensée, je pense que je m'éloigne un peu de la question initiale, alors je vais en avoir creusé à cet égard. - merci pour l'aide @lee


"Tous les arrière-petits-enfants de #msgbox": $ ('# msgbox> *> *> *') . Découvrez le JQUERY SELECTORS Page DOC pour plus de détails sur tous les différents sélecteurs de jQuery disponibles.