JQuery - 防止触发多个事件

时间:2015-11-13 19:37:26

标签: javascript jquery

我使用JQuery中的事件在不同的JavaScript模块之间进行通信。所以在其中一个模块中我有这样的东西:

$(window).on('updateStatusRequest', function(ev) {
    // Send updateStatus event after fetching data
    data = fetchData();
    $(window).trigger('updateStatus', data);
});

此数据提取可能会持续很长时间(它会在外部发送HTTP请求),然后才能完成。这是我现在正在考虑的一个问题 - 如果有很多“updateStatusRequest”,那该怎么办呢?触发并且该功能还没有获取数据?在这种情况下,我想防止多次数据提取,所以我想到这样的事情:

$(window).on('updateStatusRequest', function(ev) {
    $(window).off('updateStatusRequest', this);
    // Send updateStatus event after fetching data
    data = fetchData();
    $(window).trigger('updateStatus', data);
    $(window).on('updateStatusRequest', this);
});

所以我想在执行期间关闭回调。不幸的是,上面的方法不起作用。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

重新添加事件处理程序时需要回调。这样的事情应该有效:

$(window).on('updateStatusRequest', function(ev) {
    newFunction();
});

var newFunction = function (){
    $(window).off('updateStatusRequest');
    data = fetchData();
    $(window).trigger('updateStatus', data);
    $(window).on('updateStatusRequest', function (){
        newFunction();
    });
}

虽然,我可能会使用一个承诺而不是添加/删除事件处理程序......

答案 1 :(得分:0)

使用JQuery.ajax并关闭异步