2011-09-20 12 views
7

मुझे jQuery (1.6.x) के साथ अजीब समस्या है। मैं अपने पन्ने पर इस सरल फोन है:क्यों jQuery कभी-कभी window.onbeforeunload ओवरराइट करता है?

window.onbeforeunload = function() { return 'Are you sure ?'; }; 

लेकिन यह काम नहीं करता है, के रूप में मुझे पता चला गया है, jQuery window.onbeforeunload की सामग्री अधिलेखित कर देता है क्योंकि। जे एस कंसोल में, मैं देख सकता हूँ कि window.onbeforeunload jQuery कोड का टुकड़ा शामिल हैं:

function(e) { 
// Discard the second event of a jQuery.event.trigger() and 
// when an event is called after a page has unloaded 
return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? 
    jQuery.event.handle.apply(eventHandle.elem, arguments) : undefined; 
}; 

वहाँ एक रास्ता क्यों और जहां jQuery मेरी onbeforeunload समारोह अधिलेखित कर देता है मैं मिल सकता है है? जब मैं बस jsfiddle को चलाने के लिए बस jsfiddle चलाने की कोशिश करता हूं और मेरे ऑनबर्ननलोड फ़ंक्शन के साथ, यह अपेक्षा के अनुसार काम करता है।

किसी भी संकेत की सराहना की जाएगी। अग्रिम में धन्यवाद।

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

शायद ज़रुरत पड़े, किसी का उपयोग कर पता चलता है:

$(window).bind('beforeunload', function() { return 'Are you sure';}); 

मैं पहले से ही यह कोशिश की है और यह शुद्ध जावास्क्रिप्ट का उपयोग कर के रूप में एक ही तरह से व्यवहार करता है।

+0

क्या आप इसके बजाय jQuery 'unload' विधि का उपयोग कर सकते हैं? http://api.jquery.com/unload/ –

+0

मैं अपने स्वयं के फ़ंक्शन को 'onbeforeunload' पर सफलतापूर्वक लागू करने में सक्षम हूं और मैं jQuery 1.6 का उपयोग करता हूं। क्या कोई और जानकारी या कोड है जो आप प्रदान कर सकते हैं? क्या यह सभी ब्राउज़रों में काम नहीं करता है? http://jsfiddle.net/Kai/QgVE8/ – Kai

+0

आप अंतरिक्ष में चिल्ला रहे हैं। एक परीक्षण केस प्रदान करें जो इस समस्या को पुन: उत्पन्न करता है और हम सहायता कर सकते हैं। – mekwall

उत्तर

4

ठीक है, मैंने आखिरकार एक समाधान का पता लगाया है, जो शायद सबसे साफ नहीं है - क्योंकि मुझे समस्या का सही कारण पता नहीं है - लेकिन यह काम करता है। मैंने अपना पहले से लोड फ़ंक्शन को jQuery के लोड फ़ंक्शन में रखा है, इसलिए इसे डीओएम के बाद निष्पादित किया गया है और अन्य तत्व लोड किए गए हैं।

$(window).load(function() { 
    $(window).bind('beforeunload', function() { return 'Are you sure ?';}); 
}); 
+0

यह $ (विंडो)। बाइंड ('प्रीनलोड', फ़ंक्शन() {वापसी 'क्या आप निश्चित हैं?';}); धन्यवाद मेरे लिए ठीक काम किया –

0

आप कुछ भाग्य एक setTimeout(function(){ ... },0) की कोशिश कर रहा हो सकता है, मैं एक ही समस्या में पड़ गए और यह एक व्यवहार्य समाधान के रूप में काम किया।

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