Если вы измените исходное значение bind
(или click
или что-то еще, click
- это просто оболочка для bind
) на live
или (лучше) delegate
, они переживут обновления базовых элементов DOM.
К сожалению, на сайте api.jquery.com сегодня возникают проблемы, поэтому эти ссылки не будут чрезмерно полезными прямо сейчас.В основном, однако, если у вас есть:
$("some_selector").click(function() { ... });
Вы можете изменить его на
$("some_selector").live("click", function() { ... });
или (лучше)
$("some_parent_element_selector").delegate("selector_for_descendants", "click", function() { ... });
Что происходит с этим jQueryотслеживает событие в родительском элементе (или "теле" в случае live
), а затем проверяет, соответствует ли исходный элемент выбранному вами селектору.Если это так, он вызывает ваш обработчик, как если бы он был подключен к фактическому элементу.Поскольку обработчик находится на элементе-предке, а не на фактическом элементе-потомке, вы можете поменять его по своему желанию.Иногда это называется «делегированием события» (отсюда и функция delegate
).
Пример:
HTML:
<div id='container'>
This is the container.
<div class='foo'>
This is the descendant of the container. Click me.
</div>
</div>
JavaScript:
$("#container").delegate(".foo", "click", function() {
$("<p>Element with class 'foo' clicked!</p>").appendTo(document.body);
});
Живая копия