2009-04-19 10 views
13

मुझे किसी पृष्ठ को छोड़ने पर उपयोगकर्ता को अपना काम सहेजने के लिए संकेत देना होगा। मैंने पहले से लोड करने की कोशिश की है, लेकिन मुझे एक स्टाइल प्रॉम्प्ट दिखाने की ज़रूरत है जो सामान्य संवाद बॉक्स नहीं है। फेसबुक ने इसे हासिल करने में कामयाब रहा है (यदि आपके पास एक फेसबुक खाता है, तो अपनी प्रोफाइल जानकारी संपादित करें और बिना किसी सहेजे बिना किसी अन्य पेज पर जाएं और आपको स्टाइल प्रॉम्प्ट मिलता है)। मैंने jquery unload को भी आजमाया है लेकिन प्रक्षेपण से अनलोड ईवेंट को रोकने का कोई तरीका प्रतीत नहीं होता है।जब वे कोई पृष्ठ छोड़ते हैं तो उपयोगकर्ता को सहेजने के लिए उपयोगकर्ता को सूचित करना

+0

यह देखने के लिए जा रहा है कि स्टैक ओवरफ़्लो किस प्रकार उपयोग करता है। जब कोई छोड़ रहा है, तो वे समझने में सक्षम हैं, भले ही वे किसी अन्य स्टैक ओवरफ़्लो पृष्ठ के अलावा कहीं और जा रहे हों। इसलिए, वे इसे क्लाइंट-साइड कर रहे होंगे। –

+1

स्टैक ओवरव्लो नियमित विंडो का उपयोग करता है। ऐसा लगता है कि ऐसा लगता है। – markus

+0

क्या आपने "onbeforeunload" ईवेंट पर एक विशेष div दिखाने की कोशिश की है? यह काम कर सकता है। – BYK

उत्तर

25

क्या फेसबुक कर रही है को करीब से देख लें: जब, पता बार में एक नया URL दर्ज एक बुकमार्क पर क्लिक करें, या वापस नेविगेट अगर आप पेज पर एक लिंक क्लिक आपको एक संदेश मिलता है, लेकिन कुछ भी नहीं आपके ब्राउज़र का इतिहास

यदि यह आपके लिए काम करता है, तो यह करना आसान है: पृष्ठ पर प्रत्येक लिंक पर click ईवेंट हैंडलर जोड़ें, और इससे अपनी शैलीबद्ध पुष्टि को ट्रिगर करें। चूंकि इन हैंडलर को से पहले कॉल किया जाएगा पृष्ठ के भीतर से किसी भी नेविगेशन ईवेंट से शुरू होने के बाद, आप हैंडलर में जो कुछ भी चाहते हैं, वह कर सकते हैं - डेटा बचाएं, पूरी तरह से ईवेंट रद्द करें, इच्छित गंतव्य रिकॉर्ड करें और इसे स्थगित करें 'जब तक वे पुष्टि नहीं करते ...

हालांकि, अगर आपको आवश्यकता है या नेविगेशन घटनाओं का जवाब देना चाहते हैं, तो आपको onbeforeunload का उपयोग करना होगा। और हां, संवाद गड़बड़ है, और आप इस कार्यक्रम को रद्द नहीं कर सकते हैं - यही वह कीमत है जो हम सभी घृणास्पद बेवकूफों के लिए भुगतान करते हैं जो '9 0 के दशक में ऐसी सुविधाओं का दुरुपयोग करते हैं। क्षमा करें ...

+0

यदि यह पर्याप्त नहीं है तो आप अन्य प्रयोजनों के लिए एक विंडो जोड़ सकते हैं। उपयोगकर्ताओं को अन्य कार्यक्रमों के मामले में उपयोगकर्ताओं को अपना डेटा खोने से रोकने के लिए। – markus

+0

लिंक और ऑनबेरनलोड के साथ बेल्ट-एंड-ब्रेसिज़ के लिए +1। हालांकि, इसके साथ भाग लें और केवल इसका उपयोग करें जहां महत्वपूर्ण डेटा हानि का वास्तविक खतरा है। व्यक्तिगत रूप से मुझे लगता है कि एसओ का थोड़ा परेशान होना चाहिए! – bobince

+3

मैं प्रत्येक सिंगल लिंक पर इवेंट हैंडलर पंजीकृत करने के बजाय इवेंट प्रतिनिधिमंडल का उपयोग करूंगा ... – James

5

चयनित उत्तर अच्छा है लेकिन मुझे अभी भी विवरण के लिए खोदना पड़ा है। आप onbeforeunload घटना का उपयोग करना चाहते हैं, तो यहां कुछ नमूना कोड:

<script> 
window.onbeforeunload= function() { return "Custom message here"; }; 
</script> 
2

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

$('.measurement_value').change(function() { 
     $(window).bind('beforeunload', function(){ 
      return 'You have unsaved changes, are you sure you want to leave?'; 
     }); 

     $('#MeasurementAdminEditForm').submit(function(){ 
      $(window).unbind('beforeunload'); 
     }); 
     $('#CancelButton').click(function(){ 
      $(window).unbind('beforeunload'); 
     }); 
    }); 

मेरी फार्म तत्वों में से प्रत्येक को मैं 'measurement_value' के एक वर्ग देने के लिए और उसके बाद ही beforeunload लोड करता है, तो उन तत्वों में से एक बदल जाते हैं। इसके अलावा मैं अपने फॉर्म जमा करने और रद्द बटन के क्लिक पर पहले से लोडलोड को अनलोड करता हूं।

उम्मीद है कि यह किसी और की मदद करेगा।

संबंधित मुद्दे