Я не знаю, как сломаться или вернуться из addEventListener

Здесь я получаю сообщение об ошибке «Неопределенная метка 'testfunc'»

testfunc:
    test.addEventListener("click", function(){
        console.log("TEST")
        break testfunc
    })

Здесь я получаю «ТЕСТ» каждый раз, когда я нажимаю, но я хочу, чтобы это было только для console.log («ТЕСТ») только один раз

function testfunc(){
    test.addEventListener("click", function(){
        console.log("TEST")
        return
    })
}
1
LukaZmaj 26 Янв 2022 в 16:19
"но я хочу, чтобы это было только в console.log("TEST") только один раз" - ни одна из ваших попыток не сделает этого (если они будут работать)
 – 
Andreas
26 Янв 2022 в 16:21
2
developer.mozilla.org/en-US/docs/Web/ API/EventTarget/… может принимать объект параметров
 – 
evolutionxbox
26 Янв 2022 в 16:25
2
Отвечает ли это на ваш вопрос? Выполнять событие только один раз?
 – 
Ivar
26 Янв 2022 в 16:28
addEventListener не является циклом. Вам нужно вызвать removeEventListener, чтобы он больше не вызывался.
 – 
Bergi
26 Янв 2022 в 16:29
1
Хорошее место.
 – 
evolutionxbox
26 Янв 2022 в 16:29

2 ответа

Лучший ответ

Вы можете создать какую-то переменную и поставить там флаг (true/false), например:

let isClicked = false;

function testfunc(){
    test.addEventListener("click", function(){
      if (isClicked) return;
        console.log("TEST")
       isClicked = true
    })
}
-3
Pavlo Marchenko 26 Янв 2022 в 16:23
Спасибо, это работает!
 – 
LukaZmaj
26 Янв 2022 в 16:28
Конечно, это работает, но имеет смысл полностью остановить запуск события.
 – 
Ivar
26 Янв 2022 в 16:31

Вы не можете вернуть testfunc из события в вашем слушателе, так как ваша анонимная функция слушателя будет выполняться в событии click после выполнения testfunc.

Что вы можете сделать, так это предотвратить повторное выполнение вашей анонимной функции прослушивателя событий. Для этого напишите условие с переменной, которая после однократного выполнения будет установлена ​​в true.

let isClicked = false;

function testFunc(){
    document.addEventListener("click", function(){

        if (isClicked) return;

        // Will be executed once.
        console.log("TEST");
        isClicked = true;
    })
}

testFunc();
-2
Alexis Philip 26 Янв 2022 в 16:27
Спасибо, это работает
 – 
LukaZmaj
26 Янв 2022 в 16:30
Если мое объяснение перед кодом помогло вам и другим, вы можете пометить ответ как принятый. Спасибо :)
 – 
Alexis Philip
26 Янв 2022 в 16:32