Лучший способ решить вашу проблему - вместо использования $("h1.handle")
для обратного вызова AJAX перейти на $(data).find("h1.handle")
. Что-то вроде
var x = $(data);
x.insertBefore(...);
/* your other code */
x.find('h1.handle').click(...).addClass(...);
Таким образом, событие будет ограничено только для вновь добавленных предметов. Уже существующие не будут затронуты.
Если мы хотим ответить на ваш вопрос, а не просто решить вашу проблему, у нас есть несколько альтернатив, таких как:
- сохраните в своих объектах, что обработчик события onclick был установлен так, что вы не можете установить его дважды
- всегда связывает событие onclick , но всегда сначала отменяет привязку
- использовать живые события jQuery, а addClass открывается только для вновь созданных элементов.
ИМО, первый самый простой. Вы можете сделать это, используя jQuery's data () . Тогда вы можете сделать что-то вроде:
$("h1.handle").each(function() {
var me = $(this);
// if already has click handler, don't do anything
if (me.data('click_set') != null) { return true; }
// otherwise, store the data and bind the click event
me.data('click_set', true).click(function() {
/* the code you already have on the click handler */
}).addClass('open');
}
Второй вариант заключается в сохранении функции, которую вы передаете inline в связыватель событий click, в переменной, а затем с помощью unbind jQuery для ее отключения.