2013-07-09 5 views
5

मैंने हाल ही में JQuery को संस्करण 1.9 में अपग्रेड किया है। संस्करण 1.4 पर, मैं ऐसा कुछ कर रहा था:मैं JQuery 1.9 में सभी विंडो ईवेंट कैसे प्राप्त कर सकता हूं?

 var windowEvents = $(window).data("events"); 
    if (windowEvents.unload.length > 0) { 
      // some fun stuff 
    } 

बेशक, jQuery 1.8 में यह क्षमता हटा दी गई थी। कुछ शोध के बाद, मैं इस के आसपास प्राप्त करने के लिए एक सुझाव मिला:

 var windowEvents = $._data($(window), "events"); 

लेकिन, सांत्वना के अनुसार, windowEvents अनिर्धारित रहता है। मैं क्या गलत कर रहा हूं? कोई अन्य सुझाव?

अग्रिम धन्यवाद :)

+0

क्या यह '$ (विंडो) .डेटा ('__ घटनाएं __') काम करता है;'? – tymeJV

+2

मैं कोड नहीं लिखूंगा जो अनियंत्रित विशेषताओं पर निर्भर करता है, जैसे ईवेंट हैंडलर किसी विशेष स्थान पर संग्रहीत किए जा रहे हैं। –

+0

क्या आपने खिड़की पर किसी भी हैंडलर को बांध दिया है? –

उत्तर

0

में वे अभी भी एक ही स्थान पर जमा हो जाती है। लेकिन यह केवल उन घटनाओं को संग्रहीत करता है जो बाध्य हैं, और केवल कम से कम एक के बाद (अन्यथा data()undefined वापस आ जाएगा)।

तो तुम अपनी हालत को बदलने के लिए होगा

var windowEvents = $(window).data("events") || {}; 
if (windowEvents.unload && windowEvents.unload.length > 0) { 
     // some fun stuff 
} 
3

$._data साथ मेरे लिए काम करने के लिए लगता है, तो ईवेंट हैंडलर बाध्य है:

$(window).on('unload', function() { 
    // do stuff 
}); 

if (($._data(window, 'events').unload || []).length) { 
    console.log('unload is bound'); 
}else{ 
    console.log('unload is NOT bound'); 
} 

FIDDLE

1

मैं एक सहित समाप्त हो गया यह देखने के लिए जांचें कि क्या विंडो एवेन्ट्स परिभाषित किया गया था। इसके अलावा मैंने घटनाओं के लिए पूछते समय [0] शामिल किया था (यह समाधान यहां पाया गया था: jQuery 1.8 find event handlers)। तो अंतिम कोड इस तरह दिखता है:

var windowEvents = $._data($(window)[0], "events"); 
if (windowEvents && windowEvents.unload.length > 0) { 
    // some fun stuff 
} 

यह अब अपग्रेड से पहले काम कर रहा है। आपकी सहायताके लिए धन्यवाद!

+2

यह बहुत अच्छा है, लेकिन आपको वास्तव में मूल विंडो को '[0]' के साथ प्राप्त करने के लिए jQuery में विंडो को लपेटना नहीं चाहिए, बस मेरे उदाहरण में विंडो करें, जो आपके कोड के समान ही है, केवल क्लीनर। – adeneo

1

मैं http://dbj.org/dbj/2013/04/09/list-of-jquery-events/

पर समाधान नहीं मिला यह आधार है:

/* (c) 2013 by DBJ.ORG, GPL/MIT applies */ 
jQuery.events = function (expr) { 
    var rez = [], evo ; 
    jQuery(expr).each(
     function() { 
     if (evo = jQuery._data(this, "events")) 
      rez.push({ element: this, events: evo }) ; 
    }); 
return rez.length > 0 ? rez : null ; 
} 

उपयोग करने के लिए यह सिर्फ फोन:

jQuery.events("div"); 

कहाँ div किसी भी jQuery चयनकर्ता के लिए जगह है। मैंने इसे jQuery 1.9 पर आजमाया है और यह मेरे लिए बहुत अच्छा काम करता है।

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

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