2011-05-19 13 views
59

मैं पृष्ठ छोड़ने वाले उपयोगकर्ता पर एक संवाद बॉक्स चला रहा हूं। एकमात्र चीज यह 1 सेकंड के लिए चलती है और गायब हो जाती है? मुझे पता है कि इसे bind('beforeunload') के साथ करना है, लेकिन संवाद जितना जल्दी आप इसे पढ़ सकते हैं उससे मर जाता है।संवाद बॉक्स 1 सेकंड के लिए चलाता है और गायब हो जाता है?

मैं इसे कैसे होने से रोक सकता हूं?

$(document).ready(function() { 

    // Append dialog pop-up modem to body of page 
    $('body').append("<div id='confirmDialog' title='Confirm'><p><span class='ui-icon ui-icon-alert' style='float:left; margin:0 7px 20px 0;'></span>Are you sure you want to leave " + brandName + "? <br /> Your order will not be saved.</p></div>"); 

    // Create Dialog box 
    $('#confirmDialog').dialog({ 
     autoOpen: false, 
     modal: true, 
     overlay: { 
     backgroundColor: '#000', 
     opacity: 0.5 
     }, 
     buttons: { 
     'I am sure': function() { 
      var href = $(this).dialog('option', 'href', this.href); 
      window.location.href = href; 
     }, 
     'Complete my order': function() { 
      $(this).dialog('close'); 
     } 
     } 
    }); 

    // Bind event to Before user leaves page with function parameter e 
    $(window).bind('beforeunload', function(e) {  
     // Mozilla takes the 
     var e = $('#confirmDialog').dialog('open').dialog('option', 'href', this.href); 
     // For IE and Firefox prior to version 4 
     if (e){ 
      $('#confirmDialog').dialog('open').dialog('option', 'href', this.href); 
     } 
     // For Safari 
     e.$('#confirmDialog').dialog('open').dialog('option', 'href', this.href); 
    }); 

    // unbind function if user clicks a link 
    $('a').click(function(event) { 
     $(window).unbind(); 
     //event.preventDefault(); 
     //$('#confirmDialog').dialog('option', 'href', this.href).dialog('open'); 
    }); 

    // unbind function if user submits a form 
    $('form').submit(function() { 
     $(window).unbind(); 
    }); 
}); 
+0

आप 'वापस जाने के लिए FALSE' अन्यथा, घटना' unload' के लिए जारी है और इसके परिणामस्वरूप विंडो बंद हो जाएगी जरूरत है .. – balexandre

+1

बदले में झूठी वापसी के साथ, अधिकांश ब्राउज़र एक डिफ़ॉल्ट संवाद खोलते हैं: "रहें" या "छोड़ें" – benwasd

+4

@ बालेक्सेंड्रे: 'पहले से लोड' से 'झूठी' वापस लौटने से केवल "झूठी" के साथ एक चेतावनी बॉक्स बन जाएगा। –

उत्तर

152

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

आप beforeunload ओवरराइड करने के लिए अपने स्वयं के संवाद बॉक्स (या jQueryUI मोडल संवाद) का उपयोग नहीं कर सकते हैं।

beforeunload उपयोगकर्ता को किसी अन्य पृष्ठ पर रीडायरेक्ट नहीं कर सकता है।

$(window).on('beforeunload', function(){ 
    return 'Are you sure you want to leave?'; 
}); 

यह एक चेतावनी बॉक्स पॉप अप है कि 'Are you sure you want to leave?' कहते हैं और उपयोगकर्ता अगर वे पृष्ठ को छोड़ना चाहते हैं पूछता है कर देगा।

(अद्यतन:। फ़ायरफ़ॉक्स अपना कस्टम संदेश प्रदर्शित नहीं करता है, यह केवल अपनी ही प्रदर्शित करता है)

आप एक समारोह के रूप पेज उतारने है चलाना चाहते हैं, तो आप $(window).unload() उपयोग कर सकते हैं, बस ध्यान दें कि यह कर सकते हैं पृष्ठ को अनलोड करने या उपयोगकर्ता को रीडायरेक्ट करने से रोकें। (अद्यतन: unload में Chrome और Firefox ब्लॉक अलर्ट।)

$(window).unload(function(){ 
    alert('Bye.'); 
}); 

डेमो: http://jsfiddle.net/3kvAC/241/

अद्यतन:

$(...).unload(...)deprecated jQuery v1.8 के बाद से है, बजाय का उपयोग करें:

$(window).on('unload', function(){ 
}); 
+4

ऐसा लगता है जैसे फ़ायरफ़ॉक्स अब चेतावनी को अवरुद्ध कर रहा है() भी – alumi

+1

@alumi: मुझे लगता है कि जब आप कोई अलर्ट जोड़ते हैं तो ब्राउज़र इसे पसंद नहीं करते हैं, इसलिए ब्राउज़र पृष्ठ को नहीं छोड़ सकता है।यह ईवेंट का काम दिखाने के लिए सिर्फ एक उदाहरण था ^^ –

+0

जागरूक रहें, हालांकि, [window.onbeforeunload आईपैड पर काम नहीं कर रहा है] (http://stackoverflow.com/questions/3239834/window-onbeforeunload-not-working -ऑन-द-आईपैड) –

3

आप निम्न अनलोड विधि का भी उपयोग कर सकते हैं माइक्रोसॉफ्ट द्वारा इसे प्राप्त करने के लिए। लाइव डेमो देखने के लिए here पर क्लिक करें।

function closeIt() 
    { 
    return "Any string value here forces a dialog box to \n" + 
     "appear before closing the window."; 
    } 
    window.onbeforeunload = closeIt; 

Click माइक्रोसॉफ्ट दस्तावेज पढ़ने के लिए।

+1

काम नहीं कर रहा है ... कस्टम संदेश नहीं आता है। ब्राउज़र केवल अपना डिफ़ॉल्ट संदेश दिखाता है। –

0

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

क्या यह मेरे लिए काम किया है (और मैं सब कुछ करने की कोशिश की), था यह:

function myLoader() { 
    // Show my Loader Script; 
} 

$(window).on('beforeunload' , function() { 
    myLoader(); 
}); 
संबंधित मुद्दे