«Живые» события
Я тут немного забегу вперёд, так что если чего стало непонятно, отложите данный раздел «на потом».
Стоит обратить внимание на ещё одну задачку, которая очень часто ставится перед разработчиком – это добавление обработчиков событий для элементов, которые добавляются на страницу динамически. Пожалуй, надо привести пример подобной задачи:
– У нас есть HTML-страница, на которой все внутренние ссылки будут подгружаться через AJAX, данное утверждение справедливо и для подгружаемого HTML тоже.
Первое условие решается просто:
Для наглядности условимся, что внутренние ссылки содержат относительные пути от корня сайта.
Со вторым условием чуть-чуть посложнее ситуация, но тоже вполне решаема:
Отличий не так уж и много, проясню происходящее:
первым делом на элемент
<body>
будет повешен обработчик событияclick
данный обработчик будет срабатывать только в том случае, когда событие будет относиться к элементу
Работа данной схемы базируется на «всплытии» событий, так что, используя метод event.stopPropagation()
, вы сможете предотвратить выполнение «живых» обработчиков.
Лирическое отступление к истории: жил да был когда-то плагин для jQuery, назывался «live», позволял он вешать обработчики на элементы DOM-дерева, которых ещё нет (подгружаемые через AJAX или ещё как), а потом
он умерего внесли в само ядро. Методlive()
к тому времени работал лишь сdocument
. Затем появился методdelegate()
, который научился вешать обработчик на произвольный элемент, а затем и он был поглощён методомon()
. Так что не пугайтесь сильно, если встретите старый методlive()
, адаптировать под новые версии jQuery его будет не так уж и сложно (ну, я на это надеюсь).
Last updated