フォーム送信をインターセプトして 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 回ですが、それ以上の場合もあります)。
コールバックが一度だけ呼び出されるように、これを行う方法を理解したいと思います。