Дважды запуск события щелчка JS

#javascript #dom

#javascript #dom

Вопрос:

Получение события щелчка дважды для одного и того же элемента в этом коде и не использовать why

 document.addEventListener('click', function (event) {

        console.log("click");
        
        if (!event.target.closest('.expand')) return;

        console.log("clicked me");

    }, false);
  

консоль одним щелчком мыши:
щелчок x 2
щелкнул меня x 2

Комментарии:

1. Коду не хватает детализации. Не могли бы вы предоставить более подробную информацию, поскольку неясно, с какой проблемой вы столкнулись из приведенного выше кода.

2. В чем проблема?

3. Здесь не так много контекста, но этот конкретный код не должен регистрировать два щелчка, поэтому вы можете добавлять событие (запускать этот код) дважды. console.log('event added') прямо перед добавлением события и посмотрите, печатается ли оно дважды.

Ответ №1:

Вероятно, вы дважды добавляете прослушиватель событий. Поместите точку останова или сообщение журнала в строку перед document.addEventListener('click', function (event) {

Ответ №2:

казалось, что добавление кода, завернутого, как показано ниже, добавляло код в память дважды, хотя он был на странице один раз… очень странно, любой ответ на этот вопрос был бы крутым.

 (window.onload = function () {
  // code here
})();
  

Комментарии:

1. На самом деле, это не добавление кода дважды. Существует нечто, называемое немедленно вызываемым выражением функции (IIFE) developer.mozilla.org/en-US/docs/Glossary/IIFE

2. Конечно, я понимаю, что такое iife, но как получается, что eventlistener добавляется дважды в этом экземпляре… может быть, еще одна безумная причуда JavaScript?

3. вы пробовали без «iife»? Вероятно, даже если вы не указали «iife», ваш код будет выполнен один раз. Я не уверен. Всякий раз, когда вы добавляете прослушиватель событий (здесь вы добавляете прослушиватель событий в onload event), он будет прослушиваться, если вы явно не удалите его.

Ответ №3:

Если ваша проблема заключается в том, чтобы установить событие щелчка дважды для элементов перед тем, как он отобразит свою функцию, используйте

 document.addEventListener('dblclick', function (e) { code.... } )