2013-11-26 7 views
5

मैं इन पंक्तियों के साथ कुछ करने के लिए कोशिश कर रहा था:बंद किए बिना सेटटाइमआउट के अंदर jQuery सदस्य फ़ंक्शंस निष्पादित करने का तरीका?

setTimeout($('#element').hide,3000); 

जो काफी सरल लगता है, लेकिन यह "this" problem से अपंग है। मैं वास्तविक फ़ंक्शन को पैरामीटर के रूप में पास करने का कोई तरीका ढूंढना चाहता हूं, इसे किसी अन्य फ़ंक्शन में लपेटने के बिना, उदा। मैं यह करने के लिए नहीं करना चाहते:

setTimeout(function(){$('#element').hide();},3000); 

मैं क्या कोशिश की है:

setTimeout($('#element').hide,3000); 
setTimeout($('#element').hide.apply(document),3000); /* jQuery docs say that document is the default context */ 
setTimeout($('#element',document).hide,3000); 
setTimeout($(document).find('#element').hide,3000); 
setTimeout($(window).find('#element').hide,3000); 
setTimeout($.proxy($('#element').hide,document),3000); /* I know this returns a function, which I don't want, but I have tried it */ 
setTimeout(($('#element').hide()),3000);    /* functional expression */ 

मैं जिस तरह से इस समस्या का समाधान करने के लिए देख रहा हूँ, लेकिन मैं में लपेट नहीं करना चाहते एक और समारोह कोड की कम लाइनें, बेहतर। मुझे पता है कि यह क्यों अपेक्षित काम नहीं कर रहा है, लेकिन मैं इसे बंद करने के बिना इसे कैसे ठीक कर सकता हूं?

+0

setTimeout केवल एक पैरामीटर के रूप में एक समारोह का नाम, या गुमनाम समारोह ले जाएगा, तो मुझे नहीं लगता कि के रूप में आप चाहते हैं यह किया जा सकता है। अज्ञात फ़ंक्शन का उपयोग न करने का आपका कारण क्या है? –

+0

लेख में आपने हमें दिया है, वे एक संभावित समाधान देते हैं। आप कोशिश क्यों नहीं करते? –

+1

@epascarello वे हैं जो मैंने कोशिश की है। कोड की एक पंक्ति पर सात अलग-अलग प्रयास। –

उत्तर

5

आप विधि के साथ विधि के संदर्भ को बाध्य करके इस तरह से कर सकते हैं ताकि jquery hide method this jquery ऑब्जेक्ट को इंगित करेगा, न कि वैश्विक संदर्भ। इस के लिए

Function.bind

क्रॉस ब्राउज़र वैकल्पिक:: आप बाध्य कार्यों का उपयोग कर बना सकते हैं

$.proxy

पूर्व:

var $elem = $('#element'); 
setTimeout($elem.hide.bind($elem),3000); 

या

setTimeout($.proxy($elem.hide, $elem),3000); 

या

setTimeout($.fn.hide.bind($elem),3000); //setTimeout($.proxy($.fn.hide, $elem),3000); 

Fiddle

+3

अच्छा। यदि आप फिर भी बाध्यकारी हैं - आप $ elem.hide – benjaminbenben

+1

'सेटटाइमआउट ($। प्रॉक्सी ($। fn.hide, $ (' # element ')) के बजाय $ .fn.hide का उपयोग कर सकते हैं)' छोटा है। – haim770

+0

@ बेंजामिनबेनबेन ओह हाँ सच ... अपडेट किया गया ... धन्यवाद। – PSL

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