2012-05-24 72 views
2

我聽說Opera在beforeunload時不起作用。還有一些IE的早期版本。那我怎麼一起使用它們呢?如果我在下面使用,它會在Firefox中運行2次(它們都可以工作)。使用beforeunload和unload一起嗎?

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

}); 

$(window).unload(function() { 

}); 

回答

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(); 
}); 
+0

很好的答案。爲了實現跨瀏覽器兼容性,建議使用'window.onbeforeunload = onUnload' [根據此](http://help.dottoro.com/ljhtbtum.php)。你正在創建兩個額外的函數,直接綁定'onUnload'。 – rvighne

2

我不是一個Javascript/JQuery的傢伙,但不能你只需要使用一個全局變量來跟蹤與否該方法應該運行?

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


     runme=false; 
    } 

}); 

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


     runme=false; 
    } 
}); 
3
function unloadHandler(m){ 
    alert(m); 
} 
if ($(window).unload) { 
    $(window).unload(function() { 
     unloadHandler("unload"); 
    }); 
} else if ($(window).beforeunload) { 
    $(window).bind('beforeunload', function() { 
     unloadHandler("beforeunload"); 
    }); 
}​ 
+0

那麼,這個想法+1,但在控制檯:'$(window).beforeunload' =>'undefined'。我認爲這很明顯,爲什麼。 – Apostle

相關問題