2011-05-14 20 views
203

$(document).ready के लिए निम्नलिखित शॉर्टेंड है?

(function($){ 

//some code 

})(jQuery); 

मुझे लगता है कि यह पैटर्न बहुत उपयोग किया जाता है, लेकिन मुझे इसका कोई संदर्भ नहीं मिल रहा है। यदि यह $(document).ready() के लिए शॉर्टेंड है, तो क्या कोई विशेष कारण यह काम नहीं कर सकता है? मेरे परीक्षणों में यह हमेशा तैयार घटना से पहले आग लग रहा है।

+0

किसी भी चर उल्लेख पैटर्न समारोह के अंदर परिभाषित (जैसे 'वर somevar;') समारोह –

+0

कोड $ सुनिश्चित करने के प्रभाव पड़ता है के बाहर एक ही नाम के चर की सामग्री को नहीं बदलेगा कि भीतर jQuery का प्रतिनिधित्व करता है फ़ंक्शन ब्लॉक इसलिए कोड उन स्थानों पर पोर्टेबल है जहां jQuery के लिए $ उपनाम अक्षम है या किसी अन्य चीज़ के रूप में परिभाषित किया गया है। – AsksAnyway

उत्तर

225

$(document).ready(handler) के लिए शॉर्टेंड $(handler) है (जहां handler एक फ़ंक्शन है)। here देखें।

आपके प्रश्न में कोड .ready() के साथ कुछ लेना देना नहीं है। इसके बजाय, यह jQuery ऑब्जेक्ट के साथ इसके तर्क के रूप में तुरंत-लागू फ़ंक्शन अभिव्यक्ति (आईआईएफई) है। इसका उद्देश्य कम से कम $ वैरिएबल के दायरे को अपने ब्लॉक में सीमित करना है, इसलिए यह विवादों का कारण नहीं बनता है। $ == jQuery सुनिश्चित करने के लिए आप आमतौर पर jQuery प्लगइन्स द्वारा उपयोग किए गए पैटर्न को देखते हैं।

+11

* तकनीकी रूप से * यह ** ** तुरंत फोकस अभिव्यक्ति ** लागू किया गया है। क्या यह स्वयं का आह्वान कर रहा था, यह खुद को अंदर से बुलाएगा। 'Iife' के लिए वेब पर खोजें, या [काउबॉय अल्मन के प्रसिद्ध ब्लॉग पोस्ट] (http://benalman.com/news/2010/11/immediately-invoked-function-expression/) पर आगे बढ़ें। विवरण ... शीश। – jtheletter

459

आशुलिपि है:

$(function() { 
    // Code here 
}); 
+22

पहला तर्क '$' है। शायद इसे जोड़ना चाहें। यह 'jQuery (फ़ंक्शन ($, अपरिभाषित) {}) के लिए उपयोगी है; ' – Raynos

+3

@raynos इसकी आवश्यकता नहीं है। उपर्युक्त कोड '$ (दस्तावेज़) .ready (function() {}) के लिए उपनाम के रूप में ठीक काम करता है; ' –

+8

यह जानना उपयोगी है कि आपको पहले तर्क के रूप में मुफ्त में' $ 'मिलता है। – Raynos

15

यह $(document).ready() के लिए एक आशुलिपि नहीं है।

आपके द्वारा पोस्ट किया गया कोड अंदर कोड को बॉक्स करता है और वैश्विक नामस्थान प्रदूषित किए बिना jQuery को $ के रूप में उपलब्ध बनाता है। इसका उपयोग तब किया जा सकता है जब आप एक पृष्ठ पर प्रोटोटाइप और jQuery दोनों का उपयोग करना चाहते हैं।

यहाँ प्रलेखित: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression

79

सही आशुलिपि यह है:

$(function() { 
    // this behaves as if within document.ready 
}); 

कोड तुम्हें तैनात ...

(function($){ 

//some code 

})(jQuery); 

... एक गुमनाम समारोह बनाता है और इसे तुरंत कार्यान्वित साथ jQuery कोके रूप में पारित किया जा रहा है। यह सब प्रभावी ढंग से करता है फ़ंक्शन के अंदर कोड लेता है और इसे सामान्य की तरह निष्पादित करता है, क्योंकि $jQuery के लिए पहले से ही उपनाम है। : डी

+2

आप यह कह सकते हैं कि यह भी सुनिश्चित करता है कि $ jQuery के लिए उपनाम है, यदि अन्य उपकरण जो उपनाम के रूप में $ का उपयोग करते हैं तो – FRoZeN

12
ये विशिष्ट लाइनों

jQuery प्लगइन्स के लिए हमेशा की तरह आवरण हैं: "

... सुनिश्चित करें कि आपके प्लगइन अन्य पुस्तकालयों डॉलर चिह्न का उपयोग हो सकता है कि के साथ भिड़ना नहीं है बनाने के लिए, यह करने के लिए एक अच्छी आदत है एक स्वयं निष्पादन समारोह (बंद) के लिए jQuery को पास करें जो इसे डॉलर के चिह्न पर मैप करता है ताकि इसे निष्पादन के दायरे में किसी अन्य लाइब्रेरी द्वारा ओवरराइट नहीं किया जा सके। "

(function($){ 
    $.fn.myPlugin = function() { 
    // Do your awesome plugin stuff here 
    }; 
})(jQuery); 

http://docs.jquery.com/Plugins/Authoring

9

तैयार के लिए बहु ढांचा सुरक्षित आशुलिपि से है:

jQuery(function($, undefined) { 
    // $ is guaranteed to be short for jQuery in this scope 
    // undefined is provided because it could have been overwritten elsewhere 
}); 

इसका कारण यह है jQuery केवल ढांचा $ और undefined चर का उपयोग करता है नहीं है

+0

भी लोड किया जा सकता है '(फ़ंक्शन ($) {...}) (jQuery); ' –

+1

@ माइककॉसर भी एक अच्छा दृष्टिकोण है, लेकिन इसे 'तैयार' पर नहीं बुलाया जाएगा, इसके बजाए इसे तुरंत कहा जाता है –

0

इसके बारे में क्या?

(function($) { 
    $(function() { 
    // more code using $ as alias to jQuery 
    // will be fired when document is ready 
    }); 
})(jQuery); 
संबंधित मुद्दे