使用beforeunload和unload一起?

时间:2012-05-24 19:55:51

标签: javascript jquery

我听说Opera没有使用beforeunload。还有一些早期版本的IE浏览器。那我怎么能一起使用这些呢?如果我在下面使用它,它在Firefox中运行2次(它们都可以工作)。

$(window).bind('beforeunload', function () {

});

$(window).unload(function () {

});

4 个答案:

答案 0 :(得分:3)

您需要使用排序标记,或者您可以使用此类http://documentcloud.github.com/underscore/#once

答案 1 :(得分:3)

function unloadHandler(m){
    alert(m);
}
if ($(window).unload) {
    $(window).unload(function() {
       unloadHandler("unload");
    });
} else if ($(window).beforeunload) {
    $(window).bind('beforeunload', function() {
        unloadHandler("beforeunload");
    });
}​

答案 2 :(得分:3)

有几种方法可以做到这一点。以下示例使用全局标志非常简单。

var hasUnloadBeenHandled = false;

function onUnload() {
  if (hasUnloadBeenHandled) {
    return;
  }

  //Whatever you want to be handled on unload OR on beforeunload

  hasUnloadBeenHandled = true;
}

$(window).bind('beforeunload', function () {
  onUnload();
});

$(window).unload(function () {
  onUnload();
});

答案 3 :(得分:2)

我不是Javascript / JQuery人,但你不能只使用全局变量来跟踪该方法是否应该运行?

类似

var runme = true;
$(window).bind('beforeunload', function () {
    if(runme){


        runme=false;
    }

});

$(window).unload(function () {
    if(runme){


        runme=false;
    }
});