5

मैं उपयोगकर्ताओं को चेतावनी देना चाहता हूं कि ब्राउज़र के रीफ्रेश या प्रेस बटन को दबाएं, यदि उन्होंने टेक्स्ट बॉक्स में कुछ चीज दर्ज की है। तो मैंने इसे करने के लिए विंडो का उपयोग किया है।window.onbeforeunload आंशिक पोस्टबैक घटनाओं के लिए आईई में आग

window.onbeforeunload = function() { 
    if (if user hasn't entered any thing) { 
     return; 
    } 
    return 'Entered data will be lost.'; 
}; 

यह जावास्क्रिप्ट कोड फ़ायरफ़ॉक्स और क्रोम में ठीक काम करता है। लेकिन आईई में यह फ़ंक्शन आंशिक पोस्ट बैक वाले बटनों के लिए आग लगती है। आईई में इस समस्या को दूर करने के लिए कोई समाधान? धन्यवाद :)

  • यह IE में बग के कारण हो रहा है

उत्तर

5

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 के साथ ठीक काम कर रहा है और सभी ब्राउज़रों :) धन्यवाद

+0

इस उत्तर तकनीकी रूप से दिलचस्प है के लिए है। बहुत बुरा यह पढ़ने के लिए इतना मुश्किल है। –

+1

* jquery * टैग –

+0

नहीं देखा, अरे, मुझे पता है कि यह उत्तर लगभग 3 साल पुराना है, लेकिन क्या आपको लगता है कि आप अपने उत्तर का एक गैर-jquery संस्करण जोड़ सकते हैं क्योंकि प्रश्न jquery के रूप में टैग नहीं किया गया था? –

0

`वर inFormOrLink = झूठी; var url_auth = ''; var __ignoreDirtyFlag = false;

document).ready(function() { 

if ($.browser.msie) { 
    $('').bind('click.ignoreDirtyFlag', function() { __ignoreDirtyFlag = true; alert("teste luiz") }); 

    window.onbeforeunload = function() { 
     if (!__ignoreDirtyFlag) { 
      return "Tem certeza que deseja encerrar a sessão TESTE LUIZ?"; 
     } 
     __ignoreDirtyFlag = false; 
     return; 
    }; 
} 
else { 
    $('*').live('click', function() { inFormOrLink = true; alert("Passou aqui 1 LUIZ"); }); 
    $('*').bind('submit', function() { inFormOrLink = true; alert("Passou aqui 2"); }); 
    window.onbeforeunload = function() { 
     if (!inFormOrLink) { 

      if (window.location.href.indexOf("DEV2") != -1) { 
       $.post("/DEV2/SSQ/AUTH/LOGOUT", null); 
       return 'Tem certeza que deseja encerrar a sessão TESTE DEV2?'; 
      }` 
+1

अधिकतर उत्तरों के लिए यह दिखाने के लिए एक अच्छा विचार है कि कोड कैसे काम करता है, यह कम प्रोग्रामिंग अनुभव वाले अन्य लोगों को यह समझने में मदद करता है कि कोड क्या करता है। –

+0

प्रयोजन जब भी वह ब्राउज़र बंद करता है या गंतव्य यूआरएल मैन्युअल रूप से बदलता है तो उपयोगकर्ता को लॉगआउट करना है। –

0

उद्देश्य उपयोगकर्ता जब भी वह ब्राउज़र बंद कर देता लॉगआउट या मैन्युअल रूप से बदल गंतव्य यूआरएल

var url_auth = '';var __ignoreDirtyFlag = false;$(document).ready(function() {if ($.browser.msie) {$('a').live('click', function() { __ignoreDirtyFlag = true;}); $('*').bind('submit', function() { __ignoreDirtyFlag = true; });window.onbeforeunload = function() {if (!__ignoreDirtyFlag) {if (window.location.href.indexOf("DEV2") != -1) {$.post("/DEV2/SSQ/AUTH/LOGOUT", null);return 'Tem certeza que deseja encerrar a sessão ?';}}};