我聽說Opera在beforeunload時不起作用。還有一些IE的早期版本。那我怎麼一起使用它們呢?如果我在下面使用,它會在Firefox中運行2次(它們都可以工作)。使用beforeunload和unload一起嗎?
$(window).bind('beforeunload', function() {
});
$(window).unload(function() {
});
我聽說Opera在beforeunload時不起作用。還有一些IE的早期版本。那我怎麼一起使用它們呢?如果我在下面使用,它會在Firefox中運行2次(它們都可以工作)。使用beforeunload和unload一起嗎?
$(window).bind('beforeunload', function() {
});
$(window).unload(function() {
});
有這樣做的幾種方法。以下示例使用全局標誌非常簡單。
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();
});
你需要使用排序的一個標誌,也可以使用這樣的事情http://documentcloud.github.com/underscore/#once
但它沒有在所有的瀏覽器。 – user198989
我不是一個Javascript/JQuery的傢伙,但不能你只需要使用一個全局變量來跟蹤與否該方法應該運行?
像
var runme = true;
$(window).bind('beforeunload', function() {
if(runme){
runme=false;
}
});
$(window).unload(function() {
if(runme){
runme=false;
}
});
function unloadHandler(m){
alert(m);
}
if ($(window).unload) {
$(window).unload(function() {
unloadHandler("unload");
});
} else if ($(window).beforeunload) {
$(window).bind('beforeunload', function() {
unloadHandler("beforeunload");
});
}
那麼,這個想法+1,但在控制檯:'$(window).beforeunload' =>'undefined'。我認爲這很明顯,爲什麼。 – Apostle
很好的答案。爲了實現跨瀏覽器兼容性,建議使用'window.onbeforeunload = onUnload' [根據此](http://help.dottoro.com/ljhtbtum.php)。你正在創建兩個額外的函數,直接綁定'onUnload'。 – rvighne