window.onbeforeunload समारोह IE में सही ढंग से निष्पादित नहीं। क्योंकि कुछ आंशिक पोस्टबैक को "पृष्ठ छोड़ने का प्रयास" भी माना जाता है। यदि पृष्ठ पर एक लिंक में href = "जावास्क्रिप्ट: ...." है (एएसपी.Net लिंकबटन इस तरह प्रस्तुत किया गया है), लिंक क्लिक होने पर आईई गलत तरीके से विंडो अनलोड ईवेंट को आग लगा देगा। हां, तो मैं एक dirtyflag चर रखा और अब
var __ignoreDirtyFlag = false;
$(document).ready(function() {
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() {
__ignoreDirtyFlag = true;
});
}
});
जोड़ा जब पेज, भरी हुई है लिंक के लिए href^= के साथ शुरू किया "जावास्क्रिप्ट:" उस समारोह सौंपा जाएगा। जब लिंक क्लिक किया जाता है तो यह __ingoreDirtyFlag चर सत्य बना देता है; तो
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;
};
जोड़ा अगर कोई एएसपी अद्यतन पैनल आप अपने पृष्ठ में प्रयोग किया जाता है, लिंक के लिए बाध्य समारोह ऊपर निकाल दिया जाएगा। इसलिए अपडेट पैनल को रीफ्रेश होने पर हमें फिर से लिंक पर फ़ंक्शन बाध्य करना होगा।
हां, तो
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;
});
}
}
और
बॉडी टैग ऑनलोड विधि के लिए
, मैं assinged foo() विधि। <body onload="foo()">
इस हैक IE के साथ ठीक काम कर रहा है और सभी ब्राउज़रों :) धन्यवाद
इस उत्तर तकनीकी रूप से दिलचस्प है के लिए है। बहुत बुरा यह पढ़ने के लिए इतना मुश्किल है। –
* jquery * टैग –
नहीं देखा, अरे, मुझे पता है कि यह उत्तर लगभग 3 साल पुराना है, लेकिन क्या आपको लगता है कि आप अपने उत्तर का एक गैर-jquery संस्करण जोड़ सकते हैं क्योंकि प्रश्न jquery के रूप में टैग नहीं किया गया था? –