#javascript #html
Вопрос:
Я новичок в JavaScript и пытаюсь это понять. Это пример того, с чем я борюсь.
for (let i = 0; i < 3; i ) {
test();
console.log("2");
}
function test() {
document.getElementById("Button").addEventListener("click", () =>
console.log("1"));
}
<button id="Button">BUTTON</button>
после однократного нажатия кнопки он покажет инструкцию три раза, и уже три раза в консоли будет отображаться цифра «2». Я хочу, чтобы «2» отображалось только после того, как я нажму кнопку, и для нажатия одной кнопки выполните только одну итерацию теста, т. Е. Покажите «1» в консоли.
Как бы я это сделал? Я потратил так много времени и не могу этого понять.
Комментарии:
1. Почему вы вызываете
test()
функцию в цикле for?2.
console.log("2")
является частьюfor
цикла. Конечно, он запустится немедленно. Если вы хотите, чтобы он запускался после щелчка, добавьте его в прослушиватель событий послеconsole.log("1")
Ответ №1:
Прямо сейчас вы выполняете этот цикл с 3 итерациями в начале. Это означает, что 2 регистрируется 3 раза. Также вы добавляете 3 функции-списка событий к этой кнопке, когда цикл повторяется в начале, вызывая test(). Поэтому, когда вы нажимаете кнопку, функция обратного вызова в функции addEventListener должна регистрироваться 3 раза по 1, если она не перезаписывается.
Ответ №2:
Прослушиватель событий имеет параметр «один раз» в параметрах, если вам нужно, чтобы функция срабатывала только один раз. Но если вам нужно 3 или более раз, вы можете создать счетчик и удалить прослушиватель событий вручную:
let button = document.getElementById("Button")
let counter = 0
function test() {
if (counter < 3) {
console.log("2");
counter
} else {
button.removeEventListener("click", this)
}
}
button.addEventListener("click", (console.log("1"), test));
<button id="Button">BUTTON</button>