Задать вопрос
@ArtJH

Почему когда я вешаю событие клика на кнопку, то при загрузке она сразу срабатывает?

https://codepen.io/ArtJH/pen/vYGyejE

Почему?

-----
Я разобрался оказывается когда я передаю на клик функцию с параметрами то она сразу вызывается
for(let index = 0; index < btnNextLevel.length; index++){
        btnNextLevel[index].addEventListener('click', nextLevel(btnNextLevel[index]));
    }

-----надо так
for(let index = 0; index < btnNextLevel.length; index++){
        btnNextLevel[index].addEventListener('click', nextLevel );
    }


Вопрос
Как тогда передать параметр?
  • Вопрос задан
  • 223 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Потому что кто-то не понимает разницы между собственно функцией и результатом её вызова. Вот же позорище.

Оборачивайте вызов функции в другую функцию. Или bind используйте. Или разберитесь, что принимают обработчики событий в качестве параметра, и перепишите функцию так, чтобы не надо было ей передавать элементы btnNextLevel.
Ответ написан
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Как тогда передать параметр?

Сделать обёртку, которая примет аргумент и вернёт обработчик клика
Ответ написан
@Karpion
Добавлю свои пять копеек для лучшего понимания вопроса.

В языке Си есть вызов функции (с указанием аргументов; если же их нет - то указывается пустой список аргументов), а есть ссылка на функцию (и аргументы там приткнуть просто некуда).
Естественно, результатом вызова функции м.б. как число, так и что-то иное, в т.ч. ссылка на функцию. Вот это у Вас и происходит.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы