Obtenir un événement de clic deux fois sur le même élément sur ce code et ne pas utiliser pourquoi
document.addEventListener('click', function (event) { console.log("click"); if (!event.target.closest('.expand')) return; console.log("clicked me"); }, false);
console en un clic: cliquez x 2 m'a cliqué x 2
3 Réponses :
Vous ajoutez probablement deux fois l'écouteur d'événements . Placez un point d'arrêt ou un message de journal sur la ligne avant document.addEventListener('click', function (event) {
Si votre problème est de définir un événement clic double sur un élément avant qu'il ne rende sa fonction, utilisez
document.addEventListener('dblclick', function (e) { code.... } )
semblait que l'ajout du code enveloppé oike ce qui suit ajoutait deux fois le code en mémoire bien qu'il soit sur la page une fois ... très étrange, toute réponse à ce problème serait cool.
(window.onload = function () { // code here })();
En fait, il ne s'agit pas d'ajouter deux fois le code. Il existe quelque chose appelé Expression de fonction immédiatement invoquée (IIFE) developer.mozilla.org/en-US/docs/Glossary/IIFE
Bien sûr, je comprends ce qu'est une iife, mais comment se fait-il que l'écouteur d'événements soit ajouté deux fois dans ce cas ... une autre bizarrerie folle de JavaScript peut-être?
avez-vous essayé sans "iife"? Probablement, même si vous n'avez pas mis "iife", votre code sera exécuté une fois. Je ne suis pas sûr. Chaque fois que vous ajoutez un écouteur d'événement (ici, vous ajoutez un écouteur d'événement à onload
événement onload
), il écoutera à moins que vous ne le supprimiez explicitement.
Le code manque de détails. Pouvez-vous s'il vous plaît fournir plus de détails car il n'est pas clair quel est le problème auquel vous êtes confronté à partir du code ci-dessus.
Quelle est la solution?
Il n'y a pas beaucoup de contexte ici, mais ce code spécifique ne devrait pas enregistrer deux clics, vous pourriez donc ajouter l'événement (en exécutant ce code) deux fois.
console.log('event added')
juste avant d'ajouter l'événement et voir s'il s'imprime deux fois.