window.onbeforeunload功能在IE中執行不正確。因爲一些部分回發也被認爲是「試圖離開頁面」。 如果頁面上的鏈接具有href =「javascript:....」(ASP.Net LinkButton呈現爲這樣),IE將在點擊鏈接時錯誤地觸發窗口卸載事件。 所以,我保持着dirtyflag變量,當加載頁面時,用於鏈接開始HREF = ^添加
var __ignoreDirtyFlag = false;
$(document).ready(function() {
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() {
__ignoreDirtyFlag = true;
});
}
});
現在「的javascript:」將賦予該功能。當鏈接被點擊時,它使__ingoreDirtyFlag變量爲true; 然後加入
window.onbeforeunload = function globalWindowUnload() {
if (!__ignoreDirtyFlag && isDataFilled == true) {
return "You have unsaved changes on this page. If you leave this page, those changes will be lost.";
}
__ignoreDirtyFlag = false;
return;
};
如果你已經在你的頁面中使用的任何ASP更新面板,上述功能結合到該鏈接將被刪除。 所以我們必須在刷新更新面板時再次將功能綁定到鏈接。
所以,
function foo() {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
}
function endRequestHandler(sender, args) {
// Do your stuff
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() {
__ignoreDirtyFlag = true;
});
}
}
和
用於身體標記的onload方法,我assinged FOO()方法。 <body onload="foo()">
這個技巧是工作的罰款與IE和所有的瀏覽器:) 感謝
這個答案在技術上是有趣的。太糟糕了,它很難閱讀。 – 2013-11-29 10:20:55
沒有看到* jquery *標籤 – 2014-05-26 17:13:52
嘿,我知道這個答案差不多3年了,但是你認爲你可以添加一個非jquery版本的答案,因爲這個問題沒有被標記爲jquery嗎? – 2016-02-04 19:29:58