【问题标题】:Detect page unload with javascript使用 javascript 检测页面卸载
【发布时间】:2013-05-28 17:37:13
【问题描述】:

我有一个取消按钮,它执行 ajax,然后刷新页面内容,当导航离开时,我想触发该按钮,但我不希望它刷新 UI 中的任何内容。

我想过用一个全局变量,放在window对象中,但是好像不太好:

$(".cancel").bind("click", function(e) {
    e.preventDefault();
    tellTheServerThatUserCanceled(); // ajax call
    if (!isUnloading) refreshUI();
});

$(window).bind("unload", function(e) {
    isUnloading = true; // this is disgusting, I don't want to do this
    $(".cancel").trigger("click");
}

有没有官方的方式,或者其他更优雅的方式,或者我不应该担心使用全局变量?

编辑: unload 事件代码不知道它必须做什么,因为页面可以有多个编辑面板,带有多个取消按钮。它只知道它必须触发每个面板的取消按钮。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    我发现最好不要在 jQuery 的匿名函数中运行您的代码,而是让它们调用可共享的函数。这样的事情说明了一般的想法:

    function doCancel(e, isUnloading){
        e.preventDefault();
        tellTheServerThatUserCanceled(); // ajax call
        if (!isUnloading) refreshUI();
    }
    
    $(".cancel").bind("click", function(e) {
        doCancel(e, false);
    });
    
    $(window).bind("unload", function(e) {
        doCancel(e, true);
    }
    

    【讨论】:

    • 很遗憾,unload 事件无法绑定到特定的取消函数。该页面由多个面板组成,当处于编辑模式时有取消按钮......卸载事件必须取消编辑模式下的所有面板,调用每个面板特定的取消函数。
    猜你喜欢
    • 2019-07-09
    • 1970-01-01
    • 2014-04-09
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2016-02-21
    相关资源
    最近更新 更多