Есть несколько вещей, которые вы можете сделать:
Именованные функции
Нет никаких причин дублировать одну и ту же функцию в более чем одном месте.Вместо этого присвойте функции имя и ссылайтесь на нее из двух мест:
$("a.delete").click(handleDelete);
// ...
$.ajax({
// ...
success: function(...) {
$(some_selector).click(handleDelete);
}
});
function handleDelete() {
// ...do the deletion
}
И / или используйте делегирование события
Но во многих случаях вы также можете использоватьделегирование события для подключения обработчика, который будет использоваться даже для элементов, которые еще не были созданы, используя live
или (если возможно) delegate
:
$("a.delete").live("click", handleDelete);
Или, в идеале, подключите это к контейнеру, который содержит все эти ссылки для удаления:
$("selector_for_container").delegate("a.delete", "click", handleDelete);
, который говорит jQuery подключить событие «click» к документу, а затем, когдапроисходит щелчок, чтобы увидеть, соответствует ли фактический нажатый элемент селектору «a.delete» и, если это так, запустить обработчик.
Начиная с jQuery 1.7, вы скорее используете on
чем live
:
$(document.body).on("click", "a.delete", handleDelete);
Или в идеале, если есть более конкретный контейнер, чем тело документа:
$("selector_for_container").on("click", "a.delete", handleDelete);
(Обратите внимание, что порядок аргументов отличается от delegate
.)