0

我有以下 jQuery 代码来拦截表单提交并将其转换为 Ajax 调用:

$("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;
});

从概念上讲,发生的事情是 ajax 调用返回 html,该 html 用于替换表单标记内的 div。bindExtenders() 函数调用“重新绑定”jQuery 绑定,包括此代码段描述的绑定。初始化函数是运行指定 javascript 函数的可选项目。

当我第一次在页面上提交表单时,回调只被调用一次,正如预期的那样。但是,在随后的提交中,回调被多次调用(通常是两次,但有时不止一次)。

我想弄清楚如何做到这一点,所以回调只被调用一次。

4

1 回答 1

0

你可以这样做:

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

这样你就不需要重新绑定。看这里:jQuery

于 2012-06-05T08:28:52.740 回答