Вот для чего .live()
:) Вот так:
jQuery(function) {
jQuery("#buttonDiv").live("click", function() {
alert("hello");
});
});
.live()
не добавляет обработчик событий, когда элемент действительно добавляется, но добавляет обработчик событий в document
при его запуске и прослушивает click
события, которые всплывают вверх. Поскольку старые и новые элементы всплывают одинаково ... неважно, когда они были добавлены, обработчик click
все еще работает, пока совпадает селектор.
Существует также аналогичный .delegate()
(который даже использует .live()
внутри), который вы можете использовать, если знаете, что кнопка будет внутри определенного контейнера, скажем вы перезагружая контейнер #content
через AJAX, это выглядело бы так:
jQuery(function) {
jQuery("#content").delegate("#buttonDiv", "click", function() {
alert("hello");
});
});
Это добавляет, что прослушиватель для всплывающих событий на #content
, который просто сохраняет несколько пузырьков, прежде чем поймать его, в отличие от того, чтобы он прошел до document
... на практике либо все в порядке, и вы не можете расскажите разницу в производительности, если вы не используете обработчики событий ton из .live()
.