AJAX не "захватывает" событие без обновления - PullRequest
2 голосов
/ 31 июля 2009

Я новичок в этом, поэтому, пожалуйста, потерпите меня ...

Допустим, у меня есть этот код JavaScript

$(document).ready(function() {
    $("a").click(function() {
        alert("Hello world!");
    });
});

Насколько я понимаю, этот код будет "захватывать" любые ссылки и публиковать окно с предупреждением. Обычно это работает нормально.

Теперь на той же странице у меня также есть таблица, и при отправке я фиксирую отправку формы и использую JQuery для добавления строки в отображение пользователей во время отправки данных на сервер.

Вот код для перехвата почтового запроса (в основном взято из Railscasts # 136 )

jQuery.ajaxSetup({
    'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "text/javascript")
    }
})

jQuery.fn.submitWithAjax = function() {
    this.submit(function() {
        $.post(this.action, $(this).serialize(), null, "script");
        return false;
    })
    return this;
};

$(document).ready(function() {
    $("#new_ride_form").submitWithAjax();
})

Вот код для визуализации частичного ...

$("#add_new_ride").before("<%= escape_javascript(render(:partial => @ride)) %>");
$("#ride_<%=@ride.id %>").effect("highlight", {color: '#aaffaa'}, 2000);
$("#new_ride_form")[0].reset();

Вот код для создания ссылки в одной из ячеек таблицы, сгенерированной частичным

<td><%= link_to  'remove', ride_url(ride),
   :id => :destroy_ride,
   :method => :delete,
   :href => delete_ride_url(ride) %>
</td>

Теперь, когда я отправляю форму, затем нажимаю ссылку «удалить» во вновь созданной строке таблицы, она просто отправляет запрос на удаление. Javascript для создания окна предупреждения «Hello World» не выполняется.

Если, однако, я отправляю форму, создаю новую строку таблицы, , затем вручную обновляю страницу , прежде чем нажать ссылку «удалить» во вновь созданной строке таблицы, появится предупреждение «Hello World». окно отображается, как и ожидалось.

Что здесь происходит, когда мне нужно обновить вручную, чтобы получить ожидаемое поведение?

Есть ли событие «document.ready» или что-то, что мне нужно вызвать после использования AJAX для добавления строки таблицы, чтобы сообщить коду «эй, здесь есть кое-что новое, что вам нужно наблюдать».

Спасибо!

Кстати, я пишу в Rails и JQuery, но я не совсем уверен, что это важно.

1 Ответ

4 голосов
/ 31 июля 2009

Звучит так, как будто вы хотите использовать jQuery.live вместо jQuery.click. Разница в том, что jQuery.click будет связывать событие нажатия для всех текущих <a> элементов, а jQuery.live будет связывать все текущего и будущего элементов.

$(document).ready(function() {
    $("a").live("click", function() {
        alert("Hello world!");
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...