2009-11-24 13 views
5

मैं बंद (वैश्विक नामस्थान प्रदूषण से बचने के लिए) के अंदर कुछ exisiting शीर्ष-स्तरीय कार्यों को समूहबद्ध करने का प्रयास कर रहा हूं, लेकिन मैं इसे काम पर नहीं कर रहा हूं।क्लोजर/स्कोप जावास्क्रिप्ट/jQuery

सबसे पहले, सभी जेएस मेरे अज्ञात फ़ंक्शन के बाहर काम करता है, लेकिन एक बार जब मैंने को अनाम फ़ंक्शन में रखा है तो मुझे "क्रॉसफ़ेड परिभाषित नहीं किया गया है" की एक त्रुटि प्राप्त होती है। क्या कोई भी पूरी तरह से स्पष्ट कुछ देखता है कि मैं गुम है?

मुझे काफी नहीं मिल रहा है कि setInterval/crossfade अज्ञात फ़ंक्शन के बाहर क्यों काम करता है लेकिन अंदर नहीं। प्रारंभ() के अंदर कुछ भी प्रारंभ() के बाहर वर्र्स/फ़ंक्शंस देखने में सक्षम होना चाहिए और यह सभी शीर्ष-स्तरीय अज्ञात फ़ंक्शन द्वारा बनाए गए बंद में संरक्षित होना चाहिए? मैं क्रॉसफ़ेड() के भीतर कुछ भी एक्सेस करने का प्रयास नहीं कर रहा हूं, मैं केवल इसे निष्पादित करने का प्रयास कर रहा हूं।

(function($) { 

    //vars up here that internal functions can access 
    //also using some jquery inside here, so using $ 

    function crossfade() { 
     //body here 
    } 

    //other functions 

    function start() { 
     //body here 

     cInterval = setInterval('crossfade()', 5000); 
    } 

})(jQuery); 

उत्तर

7

setInterval विधि खिड़की के दायरे में चलाया जाएगा ताकि crossfade समारोह वहाँ मौजूद नहीं है: आप के बजाय एक समारोह का उपयोग करना चाहिए।

cInterval = window.setInterval(function() { crossfade(); }, 5000); 
+0

बहुत धन्यवाद यह मेरे लिए काम कर रहा है। –

8

को बंद करने का निर्माण नहीं करता setInterval('crossfade()', 5000); का उपयोग करना - यह एक स्ट्रिंग बनाता होने के लिए eval() डी। ,

setInterval(function() { crossfade(); }, 5000); 
+6

मैं सेटइंटरवाल (क्रॉसफ़ेड, 5000) का उपयोग करता हूं; – Nosredna

1

वैश्विक क्षेत्र प्रदूषण से बचने के लिए आप कुछ कर सकते हैं::

  • बढ़ाएँ jQuery आपको गुमनाम समारोह बनाने के लिए इतना है कि एक बंद बनाई गई है कि समारोह के लिए सन्दर्भ होता है , क्योंकि आप पहले ही jQuery का उपयोग कर रहे हैं। (JQuery को नेमस्पेस के रूप में उपयोग करें।)
  • अपनी विधियों को पकड़ने के लिए एक ही ऑब्जेक्ट बनाएं। (अपने खुद के नाम स्थान बनाने के लिए।)
2

जब setInterval एक स्ट्रिंग पारित हो जाता है, स्ट्रिंग वैश्विक क्षेत्र में मूल्यांकन किया जाता है। यह बताता है कि crossfadesetInterval आग लगने पर क्यों दिखाई नहीं दे रहा है।

setInterval भी पारित किया जा सकता एक समारोह संदर्भ: के बाद से crossfade बिंदु जहां setInterval फोन पर दिखाई दे रहा है

जिस स्थिति में
setInterval(crossfade, 5000); 

अपने कोड अपेक्षा के अनुरूप काम करेंगे।

+0

हाँ, मैंने कोशिश की, लेकिन मुझे इसके बारे में एक त्रुटि मिली है जिसे उद्धरण के साथ नहीं कहा जा रहा है। –

+0

पसंदीदा तरीका उद्धरण के बिना है। आपको क्या त्रुटि संदेश मिला, बिल्कुल? – Nosredna