使用javascript检测页面卸载

时间:2013-05-28 17:37:13

标签: javascript jquery

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

我想过使用一个放在窗口对象中的全局变量,但这似乎不太好看:

$(".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事件代码不知道它必须做什么,因为该页面可以有多个编辑面板,有多个取消按钮。它只知道它必须触发每个面板的取消按钮。

1 个答案:

答案 0 :(得分:2)

我发现更好的是不在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);
}