2010-08-16 13 views
8

मैं वर्तमान में jquery-form-observe प्लगइन का उपयोग कर रहा हूं जो उपयोगकर्ता को "सहेजे गए" परिवर्तनों के बारे में सूचित करने के लिए ऑनबर्ननलोड का उपयोग करता है।प्रोग्राम पर चलने वाले कार्यक्रम को ट्रिगर करना संभव है?

लेकिन मेरे पास एक परिदृश्य है जहां मुझे इसे बटन पर ट्रिगर करने की आवश्यकता होती है: बटन क्लिक अंततः पृष्ठ बदलता है, लेकिन मैं उस प्रक्रिया को शुरू करने से पहले उपयोगकर्ता को संकेत देना चाहता हूं कि बटन क्लिक बंद हो जाता है ..

तो क्या jQuery के माध्यम से या फिर अन्यथा ट्रिगर करने का कोई तरीका है?

उत्तर

3

मुझे नहीं पता कि ऐसा करने का कोई सीधा तरीका है, लेकिन आप हमेशा ब्राउजर के पुष्टिकरण बॉक्स को अनुकरण कर सकते हैं।

function triggerBeforeUnload() { 
    var event = {}; 
    handler(event); 

    if (typeof event.returnValue == 'undefined' || 
     confirm('Are you sure you want to navigate away from this page?\n\n' + event.returnValue + '\n\nPress OK to continue, or Cancel to stay on the current page.')) { 
    // Continue with page unload 
    } else { 
    // Cancel page unload 
    } 
} 

संपादित करें:: यहाँ एक सरल समारोह मैं specs at MSDN के आधार पर पकाया जाता है

handler = beforeunload; 

नोट मूल में परिवर्तन:jquery.formobserver.js में, सही function beforeunload(e) { ... } की परिभाषा के बाद, इस पंक्ति जोड़ें कोड: window.onbeforeunload को handler द्वारा प्रतिस्थापित किया गया है।

+0

दोनों फ़ायरफ़ॉक्स और IE8 पर मैं फोन पर एक त्रुटि window.onbeforeunload के लिए मिलता है:

यहाँ विकल्प है। फ़ायरफ़ॉक्स त्रुटि "window.onbeforeunload एक फ़ंक्शन नहीं है" और आईई वापस आती है "ऑब्जेक्ट इस संपत्ति या विधि का समर्थन नहीं करता है" – mutex

+0

ठीक है, इसलिए समस्या यह है कि प्लगइन 'addEventListener'/'attachEvent' के माध्यम से एक ईवेंट हैंडलर को जोड़ता है और सीधे 'window.onbeforeunload' के माध्यम से नहीं। मुझे लगता है कि आपको 'preunload' फ़ंक्शन का संदर्भ प्राप्त करने के लिए प्लगइन कोड को संशोधित करना होगा। – casablanca

+0

धन्यवाद!यह अब काम करता है। हालांकि हैंडलर के लिए ग्लोबल का उपयोग करने से बचने पर कोई सुझाव? – mutex

2

आप .trigger() विधि के साथ यह कर सकते हैं:

$('button').click(function(){ 
    $(window).trigger('beforeunload'); 
}); 
+3

के लिए एक पहेली बना सकते हैं जो मैंने पहली बार कोशिश की थी, लेकिन ऐसा लगता है कि ट्रिगर को 'पहले से लोड' पर इस्तेमाल नहीं किया जा सकता क्योंकि कुछ भी ऐसा नहीं होता है जब मैं इसे कॉल करता हूं। – mutex

+0

@ म्यूटेक्स मैं जवाब देने से पहले एक ही चीज़ सोच रहा था इसलिए मैंने यह सरल परीक्षण स्थापित किया: http://jsfiddle.net/LpGq9/। शायद इसे प्लगइन का निरीक्षण करने के तरीके के साथ करना है, ऑनबर्ननलोड इवेंट हैंडलर बाध्यकारी है। – Pat

+0

हां, आप शायद सही हैं। प्लगइन बांध का उपयोग नहीं करता है; यह इसके बजाए करता है: अगर (window.attachEvent) { window.attachEvent ('onbeforeunload', preunload); } अन्यथा अगर (window.addEventListener) { window.addEventListener ('preunload', preunload, true); } – mutex

1

मैं इस सवाल भर में ठोकर खाई है, जबकि अपने ही सवाल का जवाब है कि प्रकृति में समान था के लिए खोज। तो, मैं यहां एक कामकाज के साथ आया हूँ। मुझे केवल "onbeforeunload" कॉल करने की आवश्यकता होती है जब कोई उपयोगकर्ता किसी विशिष्ट बटन पर क्लिक करता है और अन्य में से कोई भी नहीं। उम्मीद है कि यह आपके प्रश्न पर कुछ प्रकाश डालता है।

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

कोड यह रहा:

$(document).ready(function() { 
     $('.testButton').click(function() { 
      window.onbeforeunload = function() { 
       return "Enter your message here..."; 
      } 
     }); 
    }); 

संपादित करें:

तो, अन्य तरीकों से एक ही बात करने के लिए शोध करने के बाद, मैं एक और तरीका बटन के लिए ईवेंट को बांधने के लिए jQuery के .on का उपयोग कर सामने आने वाले() तरीका। कोड here देखा जा सकता है, सत्यापित करें कि पुराना कोड टिप्पणी की गई है। दोबारा, जैसा कि पहले "बग" है, लेकिन अभी भी कार्यक्षमता प्रदान करता है जिसे अनुरोध किया गया था।

$(document).ready(function() { 
     $('.testButton').on("click", function (event) { 
      window.onbeforeunload = function() { 
       return "Enter your message here..."; 
      } 
     }); 
    }); 
संबंधित मुद्दे

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