Le .each()
n'est pas nécessaire lorsque le sélecteur de clic requis est déjà utilisé $('div')
, en faisant référence à tout élément 'div'
dans le DOM.
L'événement click se propage dans l'arborescence DOM par défaut,
retour sur chaque événement Bubble l'ID en cours d'élément.
Alert interrompt l'exécution de la bulle, alertant l'ID d'élément courant faisant la phase de propagation clairement visible quand un résultat positif this.id
est satisfaite.
Sans utiliser alert
ou console.log
(dans l'exemple de l'écriture du résultat sur la page), tous les ID détectés précédemment seront écrasés sur le vol par le plus récent enregistré, résultant en seulement le dernier ID enregistré.
Disons que nous avons cette simple annonce structure HTML nous Cliquez sur l'élément paragraphe:
<div id="container">
Container element
<div id="box">
Box element
<p>Paragraph</p>
</div>
</div>
Maintenant, nous allons empêcher l'événement se propage utilisant event.stopPropagation()
$(function() {
$('div').click(function(ev) {
ev.stopPropagation();
console.log( this.id ); // "box"
});
});
Dans l'exemple ci-dessus, (! même si nous avons cliqué sur l'élément p
) l'élément Selector lié à l'événement click était $('div')
; propagation supplémentaire a été empêché - renvoyant le résultat souhaité: "box"
.
En utilisant le code ci-dessus de façon similaire, mais au lieu d'écouter pour event.target nous pourrions avoir une fin mauvais résultat:
$(function(){
$('div').click(function(ev){
console.log( ev.target.id ); // ""
// ""
});
});
cause de l'élément enregistré réelle event.target
était le HTML Paragraphe élément. La présence de deux éléments emboîtés div
(#box
et #container
) le résultat console.log
extrémités ayant un événement à bulles auge nos deux DIV sélecteurs connectant le même (vide) event.target
valeur deux fois (// "" // ""
).
Pour voir exactement l'élément courant event.currentTarget le bouillonnement est actuellement - nous pouvons faire:
console.log(ev.currentTarget.id+' '+ev.currentTarget.tagName); // "box DIV"
// "container DIV"
résultant toujours dans le dernier élément DIV.
Après avoir exploré tous les résultats ci-dessus, la réponse est d'arrêter/annuler l'événement à bulle l'arbre DOM en utilisant event.stopPropagation()
et obtenir le event.currentTarget.id
ou simplement this.id
notre sélecteur jQuery faire est déjà souhaité $('div')
Element.
Maintenant, sachant que la bulle des événements le DOM et
pour obtenir une liste de tous les ID éléments
nous venons de permettre l'événement de se propager, et recueillez l'ID dans un tableau comme dans cet exemple:
$(function(){
var allIDs = []; // Empty Array
$('div').on('mousedown', function(ev){ //
allIDs.push(this.id); // Push all bubbling DIVs ID into array!!
console.log("All IDs: " + allIDs);
console.log("Ev. bubbled Selector ID: " + this.id); // First Parent
console.log("Target ID: " + ev.target.id); // The targeted one
}).on('mouseup', function(){
allIDs = []; // Reset array for further clicks inspections
});
});
jsBin demo
rapide comme toujours! Merci de votre intérêt! J'apprécie toutes vos réponses! - Je sais que je peux assigner un évènement click à une classe de divs, ce n'est pas mon problème, j'ai besoin de retourner un ID même pour le container (c'est pourquoi j'ai ajouté de la marge aux DIVs plus petites) –
@roXon: Dans ce cas La réponse de @Matt Bridges répond à vos besoins. – Chandu
Je viens d'essayer sa réponse! Droite! merci Cyber, j'espère vous voir bientôt;) –