2012-03-06 16 views
29

अस्वीकरण: घर


पर इस कोशिश मत करो क्यों, अगर मैं jQuery का उपयोग कर रहा, $($) पेज फ्रीज करता है?

+3

डॉलर एक समारोह है। यदि आप इसे स्वयं कहते हैं तो यह अंतहीन रिकर्सन में चलता है। अस्वीकरण के लिए – Demnogonis

+8

+1! – charlietfl

+3

इस प्रश्न को सुरक्षा की आवश्यकता क्यों है? –

उत्तर

38

$($)$(document).ready($) के लिए शॉर्टकट है। तो, यह फ़ंक्शन चलाएगा (जब डोम तैयार हो या सीधे जब यह पहले से ही मामला हो)।

.ready को पारित फ़ंक्शन सुविधा के लिए jQuery फ़ंक्शन पारित किया गया है (विशेष रूप से उपयोगी जब आप noConflict मोड में हैं)। तो, $($)$ पर $ के साथ तर्क के रूप में कॉल करेगा - और सबकुछ फिर से होगा, जो अंतहीन पुनरावर्तन है।


एक अन्य स्पष्टीकरण:

  1. आप $($) कहते हैं।
  2. jQuery एक आंतरिक ready सूची में फ़ंक्शन तर्क ($) जोड़ता है।
  3. कुछ समय बाद, jQuery देखता है कि डोम तैयार है और सोचता है: "चलिए सभी कार्यों को ready सूची में कॉल करें"।
  4. ready सूची में एकमात्र फ़ंक्शन $ है, इसलिए यह $ पर कॉल करता है।
  5. jQuery sees इसे $ फ़ंक्शन को उन कार्यों के तर्क के रूप में पास करना चाहिए।
  6. यह $ पर $ के साथ तर्क के रूप में कहते हैं।
  7. $ फ़ंक्शन एक फ़ंक्शन को इसके तर्क के रूप में देखता है, लेकिन क्योंकि डोम तैयार है, यह फ़ंक्शन को सीधे कॉल करता है (इसके लिए प्रतीक्षा करने के लिए कुछ भी नहीं है)।
  8. $ फ़ंक्शन को $ के साथ तर्क के रूप में जाना जाता है।
  9. चरण 7 लागू होने के बाद से सबकुछ फिर से होता है।
+5

'$ ($) $ (दस्तावेज़) के लिए एक शॉर्टकट है। पहले से ही? –

+9

@ लाइटनेसरेसेसिन ऑर्बिट - हाँ - '$ (func)' '$ (दस्तावेज़) के लिए शॉर्टकट है .ready (func)'। – pimvdb

+1

आप सभी सुरक्षा जांच के साथ सोचेंगे, यह हम जोड़ना चाहते हैं ... –

23

अब यह है कि मैं "jQueryception" कहता हूं।

आप jQuery के भीतर पूरी jQuery लाइब्रेरी को कॉल कर रहे हैं।

अधिक जानकारी;

जब आप "$" (jQuery लाइब्रेरी द्वारा jQuery कोर फ़ंक्शन के रूप में परिभाषित) कहते हैं तो यह jQuery को प्रारंभ करता है और परिभाषित फ़ंक्शन को कॉल करने का प्रयास करता है यदि उसके पास है। जब आप वास्तव में "$ ($)" कहते हैं; आप jQuery के अंदर jQuery को कॉल करेंगे और यह बार-बार jQuery को कॉल करेगा।

jQuery 1.7.1 स्रोत कोड से;

// HANDLE: $(function) 
    // Shortcut for document ready 
    } else if (jQuery.isFunction(selector)) { 
     return rootjQuery.ready(selector); 
    } 

और

rootjQuery = jQuery(document); 

आप देख सकते हैं, जब आप $ ($) कहते हैं; यह आपके फ़ंक्शन के नाम से jQuery को कॉल करने का प्रयास करता है और यदि आप इसे jQuery के साथ दोबारा कॉल करते हैं तो वही बात अंतहीन हो जाएगी जैसा मैंने पहले समझाया है।

+4

+1: इसे प्यार करें :-) –

+12

+1: "हमें $ eeper जाना है" – Zeta

+0

@ डायबॉलिक - क्या आप थोड़ा और समझ सकते हैं ताकि यह उत्तर हटाया न जाए? – Neal

3

$jQuery फ़ैक्टरी फ़ंक्शन का उपनाम है।

jQuery फ़ैक्टरी फ़ंक्शन, जब पहले पैरा के रूप में फ़ंक्शन पारित किया गया, तो उस कार्य को document.ready पर चलाता है और jQuery को इसके पहले पैरामीटर के रूप में पास करता है।

इस प्रकार आप document.ready पर पहुंचने पर एक अनंत रिकर्सन के साथ समाप्त होते हैं।

+0

दस्तावेज़ लोड होने के बाद इसे कंसोल से चलाने पर यह कैसे काम करता है (उसी परिणाम के साथ)? –

+0

@GGG यदि 'document.ready' पहले ही पहुंच चुका है, तो 'jQuery' आगे बढ़ता है और आमंत्रण पर दिए गए फ़ंक्शन को चलाता है। – JAAulde

+0

आह, निश्चित रूप से ... –

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