2008-11-25 11 views
6

मैंने इसे here पोस्ट किया है, लेकिन सोचा कि यह अपने आप पर एक प्रश्न के लायक हो सकता है।एएसपी.नेट लिंकबटन पर बढ़ने से पहले दो बार डाउनलोड करें

जो मैं करने की कोशिश कर रहा हूं वह एक संवाद बॉक्स दिखाता है जो उपयोगकर्ता से पूछता है कि यदि सहेजे गए परिवर्तन हैं तो वह पृष्ठ छोड़ना चाहता है। यह सब ठीक काम करता है। लेकिन समस्या नीचे वर्णित है:

क्या कोई समस्या उस समस्या में आ गया है जहां इंटरनेट एक्सप्लोरर दोबारा दोबारा शुरू होने वाली घटना को चलाता है? जबकि चारों ओर घूमते हुए, मैंने पाया कि इस तथ्य के साथ कुछ करने के लिए कुछ है कि (दूसरों के बीच) एएसपी.NET लिंकबटन एचटीएमएल कोड <a href="javascript: __doPostBack... है।

जाहिर है, जब आईई एक ऐसे लिंक को एन्क्यूट करता है जिसमें href="#" नहीं है, तो यह ऑनबर्ननलोड ईवेंट को सक्रिय करता है। फिर, जब आप जावास्क्रिप्ट संवाद बॉक्स की पुष्टि करते हैं तो हम दिखा रहे हैं, पृष्ठ दूसरे पृष्ठ पर नेविगेट करने के लिए 'असली' अनलोड करेगा, और दूसरी बार ऑनबर्ननलोड ईवेंट को बढ़ाएगा।

इंटरनेट पर पेश किया गया एक समाधान एक बूलियन चर सेट करना है और संवाद दिखाने से पहले इसे जांचना है। तो दूसरी बार, यह नहीं दिखाया जाएगा। यह सब ठीक है, लेकिन जब उपयोगकर्ता रद्द करता है, तो वैरिएबल अभी भी सेट हो जाएगा। तो अगली बार जब उपयोगकर्ता पृष्ठ छोड़ना चाहता है, तो संवाद अब और नहीं दिखाया जाएगा।

आशा है कि यह थोड़ा स्पष्ट है, और मुझे उम्मीद है कि किसी को इसके आसपास एक रास्ता मिल गया है?

उत्तर

10

annakata की प्रतिक्रिया में: हाँ, लेकिन आप ब्राउज़र द्वारा संवाद बॉक्स का उपयोग करना चाहते हैं। तो आप सोच सकते हैं कि 'रिटर्न बीएफएलएजी' का उपयोग चाल (या event.returnValue = bFlag) करेगा, लेकिन यह आपको एक दूसरा संवाद बॉक्स देता है। मुझे this page के लिए धन्यवाद, एक रास्ता मिल गया है। यह वास्तव में काफी सरल है:

var onBeforeUnloadFired = false; 

उपयोग इस वैश्विक चर यहाँ:

if (!onBeforeUnloadFired) { 
    onBeforeUnloadFired = true; 
    event.returnValue = "You'll lose changes!"; 
} 
window.setTimeout("ResetOnBeforeUnloadFired()", 1000); 

और फिर उस समारोह को लागू:

function ResetOnBeforeUnloadFired() { 
    onBeforeUnloadFired = false; 
} 

तो, प्रभाव में, ध्वज का उपयोग करें, लेकिन यह रीसेट यदि उपयोगकर्ता रद्द कर देता है। पूरी तरह से मैं क्या चाहता हूं, लेकिन कुछ भी बेहतर नहीं मिला है।

+0

मुझे लगता है कि आप मेरा जवाब सचमुच ले रहे हैं। मेरा मतलब था कि आप उस संवाद में पुष्टिकरण मूल्य को संग्रहीत करना चाहते हैं जिसका उपयोग आप संवाद दिखाने से पहले जांचने के लिए करते हैं। मुझे लगता है कि आप वहाँ किसी भी तरह से मिला :) – annakata

1

मुझे इसका सामना नहीं हुआ है, लेकिन निश्चित रूप से आप फ्लैग वैरिएबल को संवाद के परिणाम के बराबर सेट कर सकते हैं? यदि उपयोगकर्ता ध्वज रद्द करता है तो वह झूठा रहेगा।

var bFlag = window.confirm('Do you want to leave this page?'); 
0

आईई ऑनस्टॉप नामक दस्तावेज़ ऑब्जेक्ट पर एक ईवेंट का समर्थन करता है। यह घटना ऑनबर्नलोड लोड घटना के बाद आग लगती है, लेकिन ऑनलोड लोड घटना से पहले। यह आपके दो संवाद प्रश्नों के बिल्कुल सही नहीं है, लेकिन यह अभी भी अन्य लोगों के लिए प्रासंगिक है जो इस धागे पर ठोकर खा सकते हैं (जैसा मैंने किया था)।

मेरी समस्या यह थी कि मुझे ऑनबेरनलोड ईवेंट फायरिंग पर लोडिंग संदेश प्रदर्शित करने की आवश्यकता थी। यह तब तक ठीक है जब तक पृष्ठ पर किसी प्रकार की पुष्टि संवाद नहीं होता है। उपयोगकर्ता द्वारा रद्द किया गया है और पृष्ठ पर बनी हुई है, भले ही ऑनबर्ननलोड ईवेंट आग लगती है। मेरे लिए सबसे आसान बात यह है कि मेरे "लोडिंग" डिस्प्ले लॉजिक को document.onstop के लिए हैंडलर में ले जाना था। इसके शीर्ष पर, आपको दस्तावेज़ ऑब्जेक्ट की readyState प्रॉपर्टी की जांच करनी होगी, जो एक और आईई-केवल फ़ील्ड है। यदि इसकी "लोडिंग" है, तो इसका मतलब है कि उपयोगकर्ता वास्तव में पृष्ठ छोड़ रहा है। यदि इसका "पूर्ण" है, तो इसका मतलब है कि उपयोगकर्ता रह रहा है।

यदि आप केवल आईई का उपयोग करने के साथ ठीक हैं, तो आपको निम्न में रुचि हो सकती है।

document.onstop = function() 
{ 
    try 
    { 
     if(document.readyState != "complete") 
     { 
      showLoadingDiv(); 
     } 
    } 
    catch(error) 
    { 
     handleError(error); 
    } 
} 
संबंधित मुद्दे