скрипты перестают работать после jquery replaceWith - PullRequest
0 голосов
/ 27 февраля 2012

Итак, у меня есть форма, которую я отправляю, используя метод jquery post, и заменяю ее содержимым данными, возвращаемыми ajax. Вот код:

    $(".filter_field").change(function() {
        $.post("/business/feedbacks/", $("#filter_form").serialize(),
            function(data) {
            $('#table-content').replaceWith($('#table-content', $(data)));
            });
    });

Теперь я столкнулся с двумя проблемами с этим методом:

1) Я также использую кнопку сброса, которая просто сбрасывает значения полей формы до начальных значений, а затем запускает событие изменения, как показано в следующем коде:

      $('#filter_reset').click(function () {
            $(':input','#filter_form')
            .not(':button, :submit, :reset, :hidden')
            .val('')
            .removeAttr('checked')
            .removeAttr('selected');
            $(".filter_field").trigger('change');

      });

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

2) У меня установлен плагин soundmanager в разделе # table-content (несколько его экземпляров). Теперь после отправки ajax этот плагин soundmanager перестает работать, поскольку я предполагаю, что, поскольку soundmanager загружается при событии ready, он не выполняется после отправки ajax и replaceWith, следовательно, он перестает работать.

Какие-нибудь решения, чтобы обойти эти проблемы? Я новичок в запросе, поэтому извините, если я делаю вещи неправильно, пожалуйста, направьте меня в правильном направлении Заранее большое спасибо.

Редактировать: получается, что если я включу $ .getScript ("/ static / js / 360player.js"); это работает правильно. Нет ли способа присоединить события к элементам, замененным с помощью команды jquery replaceWith. Событие «Вкл.» Не работает вообще.

Edit2: Оказывается, я использовал 'on' в неправильном делении. Мой плохой: (* ​​1017 *

1 Ответ

0 голосов
/ 27 февраля 2012

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

$("body").on("change", ".filter_field", function() {
    $.post("/business/feedbacks/", $("#filter_form").serialize(),
        function(data) {
        $('#table-content').replaceWith($('#table-content', $(data)));
        });
});

Не уверен насчет вашей второй проблемы, но, похоже, требуется аналогичный подходи для этого.

...