Как упомянул Дэвид и в соответствии с примером делегата liho (мне понравилось, как скрипка каскадировалась, сколько раз всплыло предупреждение !!), проблема заключается в нескольких привязках, которые можно решить с помощью .live()
(устарело)или .delegate()
(исключается) или .on()
(предпочтительный).Однако было бы ошибкой делегировать прослушивание документа или даже узла body
с точки зрения производительности.
Лучший способ сделать это - определить предка кнопки, которая никогда не будет уничтожена.body
- это простой выбор, но почти всегда мы создаем наши страницы с помощью элементов-обёрток, которые вложены на один или несколько уровней глубже, чем body
, и поэтому позволяют устанавливать меньше слушателей.
HTML:
<div id="someWrapper">
<div class="somethingThatGetsDestroyed">
<button>Click Me</button>
</div>
</div>
JS с использованием jQuery 1.7 +:
$('#someWrapper').on('click', 'button', function() {
alert('Clickity-click!');
});