javascript - JQuery:防止多次绑定(bind)(和触发)AjaxComplete 中定义的事件

标签 javascript jquery ajax

我遇到了 JQuery(最新)的 ajaxComplete() 函数的问题。 这是场景: 灯箱中显示一个表单,允许用户输入送货地址。 该表单的提交按钮绑定(bind)到脚本的 ajaxComplete() 部分中的函数(因为表单本身是使用 Ajax 加载的)。表单数据也通过 Ajax 发送到服务器。如果用户输入的数据不完整/无效,则会显示错误消息,用户可以重新输入。问题是,每次他这样做时,.done() Ajax 函数都会以指数方式执行多次:第一次,然后两次,然后 4 次,依此类推。 我想这是因为每次进行和完成 Ajax 调用(如表单提交)时,事件都会被第二次绑定(bind),然后这 2 个事件再次绑定(bind),成为其中的 4 个 :-(

这是一个代码片段:

$(document).ajaxComplete(function() {
    $('#frm_create_address').submit(function(event) {
        var formData = $('#frm_create_address').serialize();

        $.ajax({
            type        : 'POST',
            url         : '/ajax_results.asp?doIT=checkoutCreateAddress',
            data        : formData,
            dataType    : 'text',
            encode      : true
        })

        .done(function(data) {
            alert("Answer: " + data);
        })
        .fail(function(jqXHR, textStatus) {
            alert("error: " + textStatus);
        });

        return false;
    });
});

我在这里不知所措......防止多次触发 .done() 函数的最佳方法是什么?

实际上更好的问题是:防止提交事件多重绑定(bind)的最佳方法是什么:-/

在此先感谢您的帮助! 克里斯

最佳答案

在您的 ajax 函数中设置 global: false

global (default: true)
Type: Boolean
Whether to trigger global Ajax event handlers for this request. The default is true. Set to false to prevent the global handlers like ajaxStart or ajaxStop from being triggered. This can be used to control various Ajax Events.

关于javascript - JQuery:防止多次绑定(bind)(和触发)AjaxComplete 中定义的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32536912/

相关文章:

javascript - 对象不支持属性或方法 'removeClass'

javascript - 如何从 .env 文件安全地检索 API key 到 javascript View - Laravel

javascript - 在javascript文件中声明变量时如何管理 ""和 ' '

javascript - Chart.js 中的堆叠条形图,堆栈中具有不同的值

javascript - Selenium WebDriver Click 方法和 Javascript Click 方法之间的区别

javascript - 映射对象更改对象数组

JQuery UI,替换并下推项目而不是排序

jquery - 文本框未触发 asp.net 必填字段

javascript - 从 JSON 中检索特定索引处的值

javascript - 文件名 JS 中的时间戳