Как сохранить элементы событий, добавленные через вызов ajax в jQuery «активными» - PullRequest
2 голосов
/ 31 января 2009

Я размещаю контент на своей странице с помощью запроса ajax (post) следующим образом:

$("input#ViewMore").click(function() {
            var data = { before: oldestDate, threadId: 1 };
            $.post("/Message/More", data,function(html) {
                $('tbody#posts').prepend(html);
                return false;
            },
            "html");
            return false;
        });

с возвратом html выглядит примерно так:

Вывод сообщения Цитата

Все отлично работает и шикарно, все выглядит как надо, проблем нет.

Проблема возникает, когда у меня есть событие, подключенное к якору "quote", который был добавлен через вызов ajax. В частности, событие jQuery на этой привязке не запускается. Почему?

Например:

$("#quote).click(function() { ... });

Ничего не делает. Действует так, будто на нем нет событий. Я знаю, что он работает с другими якорями на странице, которые не были добавлены с помощью ajax-запроса, поэтому здесь нет ошибки кода, плюс, если я обновлю страницу, она будет работать корректно. Есть ли какая-то причина, по которой это происходит, нужно ли мне каким-то образом повторно инициализировать это событие в теге привязки? Есть идеи?

Работа с jQuery 1.3.1 (также не работала с 1.2.6), поэтому я считаю, что это моя реализация, а не сам код.

Ответы [ 4 ]

5 голосов
/ 31 января 2009

Вы можете использовать Events / live из jQuery 1.3, live , чтобы привязать обработчик к событию для всех текущих и будущих элементов.

2 голосов
/ 31 января 2009

Когда новый контент добавляется на страницу с помощью Ajax, вам необходимо заново зарегистрировать все события для этих новых элементов.

0 голосов
/ 31 января 2009

Ответ CMS помог, но вот как это закончилось:

Событие кнопки «Смотреть больше» осталось таким же, как и вне запроса AJAH, который его добавил:

$("input#ViewMore").click( function() { ... }

Элементы, у которых были события, добавляемые в запрос AJAH и выходящие из него, необходимые для использования метода live:

$('#quote').live("click", function() { ... }

Работает как шарм!

0 голосов
/ 31 января 2009

Изменено на

$('#quote').live("click", function() { ... } 

и

$("input#ViewMore").live("click", function() { ... }

Кажется, не работает

...