JQuery - выполнение кода для каждого нового экземпляра объекта DOM

Мне интересно, возможно ли это в JQuery.

У меня есть некоторый код Javascript, который создает объекты DOM на лету в ответ на действия пользователя. Некоторые из этих объектов DOM имеют определенную структуру - контейнер всегда имеет один и тот же атрибут "класс".

Я хотел бы, чтобы каждый раз, когда создавался новый экземпляр объекта DOM с классом "X", я хотел, чтобы выполнялся один и тот же фрагмент кода Javascript. Этот код добавит событие "onclick" к этому объекту DOM.

К сожалению, я не могу просто поместить код, который назначает onclick, в document.Ready(), поскольку объекты, к которым он привязан, создаются на лету, еще долго после того, как document.Ready () был выполнен.

Позволяет ли JQuery устанавливать постоянные привязки, которые будут автоматически связаны с типом объекта DOM, даже если он генерируется на лету?

4 ответа

Решение

Раньше это покрывалось "live", "делегатом" или иногда "bind". Теперь они заменены на "вкл", однако есть несколько предостережений, которые обсуждались здесь: Постоянство привязки событий Javascript

Я думаю, что нашел удивительный ответ на свой вопрос прямо в документации по JQuery.

http://docs.jquery.com/Events/live

live( type, fn )

Добавлено в jQuery 1.3: привязывает обработчик к событию (например, нажатию) для всех текущих и будущих элементов. Можно также связать пользовательские события.

Вы смотрели плагин jQuery под названием LiveQuery?

Со страницы документации LiveQuery:

Например, вы можете использовать следующий код для привязки события click ко всем тегам A, даже к любым тегам A, которые вы можете добавить через AJAX.

$('a') 
>     .livequery('click', function(event) { 
>         alert('clicked'); 
>         return false; 
>     });

Как только вы добавите новые теги A в ваш документ, Live Query свяжет событие click, и больше ничего не нужно будет вызывать или делать.

Невозможно в ядре jQuery (как вы, вероятно, поняли с другими ответами, ссылающимися на некоторые плагины)... это может быть очень простой задачей, если вам необязательно нужна вся функциональность чего-то вроде livequery

Для браузеров, которые их поддерживают - используйте событие DOM level 2 - 'DOMNodeInserted':

http://www.w3.org/TR/DOM-Level-2-Events/events.html

Другие вопросы по тегам