Вместо этого формата:
$(".ajax_node").click(function() {
Используйте .live()
для текущих и будущих элементов, например:
$(".ajax_node").live('click', function() {
Почему: .live()
прослушивает всплывающее событие в корне DOM или document
. Это ограничен одним обработчиком событий ... не имеет значения, когда был добавлен элемент, они все всплывают click
, когда щелчок попадает туда: он проверяет селектор, если он совпадает, запускает обработчик.
Почему ваш текущий метод не работает: он находит все элементы, соответствующие этому селектору в то время и связывает обработчик ... новых элементов нет, так что не поймите это обработчик. У вас есть 2 варианта для решения этой проблемы: либо используйте .live()
, который работает по-другому, как описано выше, либо повторно привяжите обработчик к этому селектору в содержимом запроса, например:
function callback(data) { //your success callback, e.g. .load(url, callback)
$(".ajax_node", data).click(myFunction);
}
В вашем случае, я думаю, .live()
намного проще, вы обычно делаете второе с виджетами и тому подобными, а не только с обработчиками событий ... но все, что плавает в вашей лодке.