https://jsfiddle.net/y444stqv/3/Inclure des éléments enfants sur écouteur d'événements, cliquez sur les éléments créés dynamiquement
Comment puis-je inclure tous les éléments de l'enfant dans le parent écouteur d'événement « clic »? Par exemple, je crée dynamiquement le code HTML suivant:
<div id="content">
<div id="donotexecuteclicklistener">But don't include me!</div>
<!-- Dynamically generated -->
<div class="items">
<div class="item item-0">
<h3>Item 0</h3>
<p>Some desc</p>
</div>
<div class="item item-1">
<h3>Item 1</h3>
<p>Some desc</p>
</div>
<div class="item item-2">
<h3>Item 2</h3>
<p>Some desc</p>
</div>
<div class="item item-3">
<h3>Item 3</h3>
<p>Some desc</p>
</div>
</div>
</div>
Je veux lier un gestionnaire de clic à chaque div « item ». Ainsi, si vous cliquez sur un élément qui est un enfant du nœud "item" (c'est-à-dire le nœud enfant "h3" ou "p"), je souhaite toujours exécuter le gestionnaire de clic "handleClick". MAIS, lorsque vous cliquez sur l'identifiant "donotexecuteclicklistener", je ne veux pas que ce gestionnaire de clic se déclenche.
var items = [];
var $content = document.getElementById('content');
for (var i = 0; i < 4; i++) {
// using ES6 template literals for ease
var item = `
<div class="item" id="item-${i}">
<h3>Item ${i}</h3>
<p>Some desc about item ${i}</p>
</div>
`;
items.push(item);
}
var html = items.join(' ');
$content.innerHTML = html;
var handleClick = function(event) {
console.log('do something with item', this, event);
}
$content.addEventListener('click', function(event) {
console.log(event.target.id);
var elements = $content.querySelectorAll('.item');
var hasMatch = Array.prototype.indexOf.call(elements, event.target) >= 0;
console.log(hasMatch);
if (hasMatch) {
handleClick.call(event.target, event);
}
})
« * Je veux utiliser la délégation de l'événement pour lier un gestionnaire de clic ... * » vous vous détournez l'expression « * délégation de l'événement * », qui est sur la capture événements bouillonnants, ne pas attacher les auditeurs. S'il vous plaît, envoyez un code exécutable ici, pas ailleurs. – RobG