jquery не срабатывает click

Набросал скрипт вывода списка каналов и хочу дальше обрабатывать клик на элемент, но столкнулся с тем, что обработчик не работает.

  • Вопрос задан более трёх лет назад
  • 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 думает, что коль уж у блока курсор-указатель, значит, он так уж и быть кликабельный. ¯\_(ツ)_/¯

Оцените статью