- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Дана задача
Даны дивы, содержащие в атрибуте data-num свой порядковый номер:
Сделайте так, чтобы по клику на любой из дивов ему в конец записывался его порядковый номер.
Подумал и решил так, все работает
Но пока соображал написал такой вариант, и вот его поведение мне непонятно. Почему функция go(i) вызывается каждую итерацию цикла?
По идее я ведь просто создаю "слушатель" который должен срабатывать по клику. А тут идет срабатывание сразу при запуске без клика.
Не проверял, но должно работать 😊
Почему функция go(i) вызывается каждую итерацию цикла?
По идее я ведь просто создаю "слушатель" который должен срабатывать по клику.
Очередное доказательство, что учебник JS не читали..
Я уже сделал рабочий вариант, вопрос не в том.
Мне интересно почему нерабочий вариант работает так как работает. Почему слушатель вызывает функцию, хотя клика нет?
Мне интересно почему нерабочий вариант работает так как работает
Вы напрямую вызвали функцию
, она и отработала. Все штатно. addEventListener вторым аргументом ждет функцию обратного вызова с 1 аргументом - эвент. Соответственно прямой вызов должен ее отдать.
Для понимания, того, что ждет addEventListener - вот такой бессмысленный, в данном случае код. Хотя, иногда может возникнуть ситуация, когда нужны какие то данные, которых в элементе нет, но в момент обхода (HTMLCollection в вашем случае или NodeList если querySelectorAll) они есть.
Доки это супер нужная и важная вещь, но: есть ф12/консоль. Оттуда можно понять
И уже тогда в гугл
Правильно ли я понимаю?
1. addEventListener('click', go) - обработчик события вызовет функцию go только когда произойдет триггер события click?
2. Если указать круглые скобки
addEventListener('click', go(i)) или addEventListener('click', go()) - функция go вызовется сразу как только интерпретатор дойдет до нее ?
P.S. получается, чтобы избежать прямого вызова, нужно оборачивать прямой вызов в еще одну функцию?
addEventListener('click', function (){go(i)});
addEventListener('click', function (){go(i)});
Попробуйте посмотреть, что получится, если div изменится где то ниже. Что div[i] в вашей функции покажет. Лучше сделать примерно так, как выше написал ArbNet
timo-71 мне уже давно не интересно как тут нужно сделать ПРАВИЛЬНО, мне хочется понять как реально работает addEventListener, прошу, ответьте на эти вопросы? Я перечитал главу https://learn.javascript.ru/introduction-browser-events и не нашел там ответы на эти вопросы.
Правильно ли я понимаю?
1. addEventListener('click', go) - обработчик события вызовет функцию go только когда произойдет триггер события click?
2. Если указать круглые скобки
addEventListener('click', go(i)) или addEventListener('click', go()) - функция go вызовется сразу как только интерпретатор дойдет до нее ?
Я перечитал главу https://learn.javascript.ru/introduction-browser-event
Вы наверно с закрытыми глазами читаете.. или соображение напрочь отсутствует..
Но 1,2 п. - поняли правильно 😀 addEventListener работает аналогично
Синтаксис добавления обработчика:
element . addEventListener ( event , handler [ , options ] ) ;
event Имя события, например "click" .
handler Ссылка на функцию-обработчик. ===> Функция должна быть присвоена как sayThanks , а не sayThanks()
options Дополнительный объект со свойствами:
Правильно ли я понимаю?
1. addEventListener('click', go) - обработчик события вызовет функцию go только когда произойдет триггер события click?
2. Если указать круглые скобки
addEventListener('click', go(i)) или addEventListener('click', go()) - функция go вызовется сразу как только интерпретатор дойдет до нее ?
1. Функция addEventListener вторым параметром получит ссылку на go, которая в вашем случает является функцией
2. Функция addEventListener получит результат выполнения функции go
Для понимания