0

フォーム送信をインターセプトして Ajax 呼び出しに変換する次の jQuery コードがあります。

$("form.section_change").off("submit").on("submit", function () {
    var section = $(this).attr("data-section");
    var initializer = $(this).attr("data-initfunc");
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        error: function (a, b) {
            debugger;
        },
        success: function (result) {
            $("div#" + section).html(result);
            bindExtenders();
            if (initializer != null) {
                var func = window[initializer];
                func();
            }
        }
    });
    return false;
});

概念的には、フォーム タグ内の div を置き換えるために使用される html で ajax 呼び出しが返されます。bindExtenders() 関数呼び出しは、このスニペットで説明されているものを含め、jQuery バインディングを「再バインド」します。初期化関数は、指定された JavaScript 関数を実行するオプションの項目です。

初めてページにアクセスしたときにフォームを送信すると、期待どおり、コールバックが 1 回だけ呼び出されます。ただし、後続の送信では、コールバックが複数回呼び出されます (通常は 2 回ですが、それ以上の場合もあります)。

コールバックが一度だけ呼び出されるように、これを行う方法を理解したいと思います。

4

1 に答える 1

0

次のようなことができます。

$('body').on('submit', 'form.section_change', function() {
// ...
});

この方法では、再バインドする必要はありません。ここを参照してください:jQuery

于 2012-06-05T08:28:52.740 に答える