0

だから私はjqueryポストメソッドを使用して送信するフォームを持っており、部門の内容をajaxの返されたデータに置き換えます。コードは次のとおりです。

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

今、私はこの方法で2つの問題に直面しています:

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) #table-content 部門に soundmanager プラグインをインストールしています (その複数のインスタンス)。ajax送信後、そのsoundmanagerプラグインが機能しなくなりました.soundmanagerがreadyイベントでロードされるため、ajax送信およびreplaceWith後に実行されないため、機能しなくなります。

これらの問題を回避する解決策はありますか? クエリを実行するのは初めてです。間違ったことをしている場合は申し訳ありませんが、正しい方向に導いてください。よろしくお願いします。

編集: $.getScript("/static/js/360player.js"); を含めると、正常に動作します。jquery replaceWith コマンドを使用して、置換された要素にイベントをアタッチする方法はありませんか。「オン」イベントはまったく機能していないようです。

Edit2: 間違った部門で「on」を使用していたことが判明しました。私の悪い:(

4

1 に答える 1

0

要素を置き換えると、関連付けられているイベント ハンドラーも削除されます。イベントハンドラーを既存の要素と将来の要素にバインドするには、委任を使用する必要があります...

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

2番目の問題についてはわかりませんが、同様のアプローチが必要なようです。

于 2012-02-27T19:49:31.547 に答える