Набросал скрипт вывода списка каналов и хочу дальше обрабатывать клик на элемент, но столкнулся с тем, что обработчик не работает.
- Вопрос задан более трёх лет назад
- 4332 просмотра
![]()
$(«span.linkurl»).on(«click», function() <
console.log(‘click-click’);
>);
![]()

ну так верно, вы вешаете событие на тот момент, когда у вас есть только шаблон, и клик срабатывает только на него, в данном случае нужно делегировать событие
либо добавлять слушатель события только после добавления элемента (когда он уже существует в DOM)
Иногда бывает так что не получается присовокупить событие .click() элементу через jQuery как не старайся.
Оказывается всё дело в том что элемент к которому мы пытаемся присвоить это событие ещё не создан.
Чтобы это исправить — следует поместить всё внутрь функции которая отработает только после того как элемент будет создан.
Кто-то может написать, что и так работает, но иногда не работает и никто не знает почему.
обычно хватает:
но не всегда.
Этот способ скорее исключение чем правило
правильнее использовать функцию «on» jquery
синтаксис такой:
$(‘body’).on(‘click’, ‘a.selector’, function() <
alert(‘Hello’);
>);
Данная функция присовокупит событие к нужному элементу или элементам как только они будут созданы в DOM страницы
это очень удобно когда сами ссылки вы динамически создаёте, а вообще чтоб хорошо ориентироваться в функциях jquery просто пройдитесь по ним по всем и почитайте их назначение, а когда всё прочитаете, сделайте это ещё раз и в памяти отпечатается на будущее.
Эх, в первый момент обрадовался, ведь у меня не работало именно с ещё не созданным элементом. Внёс правки, а эта зараза по-прежнему не раотает:( Пошёл искать дальше.
Спасибо, три часа бился не мог додуматься а тут вы дали мне подсказку.
Спасибо огромное!
$(document).on(‘click’, ‘div’, function () <. >);
не работает в iOS, если обработчик вешается на элемент, который не является нативно-кликабельным, то есть не является ссылкой. Тестировано в Safari и Chrome.
Например, если таким методом повесить событие на клик по div, то в iOS по клику по этому блоку ничего не произойдёт.
Чтобы исправить ситуацию есть 2 пути:
1. Повесить клик непосредственно на сам div, а не через $(document)-делегирование:
Или весьма забавный метод
2. Указать искомому блоку курсор-указатель в css:
$(document).on(‘click’, ‘div.clickable-div’, function () <. >);
iOS думает, что коль уж у блока курсор-указатель, значит, он так уж и быть кликабельный. ¯\_(ツ)_/¯