2012-02-14 8 views
6

मेरे पास एक सिद्धांत प्रश्न है कि क्या होता है जब आपके पास jQuery पर तत्वों के लिए खोज/तत्वों को बाध्यकारी होता है जो किसी पृष्ठ पर मौजूद नहीं होते हैं।jQuery उन तत्वों को कैसे संभालता है जो किसी पृष्ठ पर मौजूद नहीं हैं?

उदाहरण के लिए, मेरे पास एक जावास्क्रिप्ट फ़ाइल है जिसमें कई क्लिक ईवेंट हैं, हालांकि कुछ पृष्ठों पर, उन क्लिक ईवेंट का उपयोग नहीं किया जाता है। एकाधिक जावास्क्रिप्ट फ़ाइलों को बनाने और डुप्लिकेट कोड रखने के बजाय, मैंने अपने अधिकांश कोड को एक फ़ाइल में छोटा कर दिया है।

$('#target').click(function() { 
    alert('Handler for .click() called.'); 
}); 

मूल रूप से मेरे पैराग्राफ को कुछ सरल वाक्यों में जोड़ना। क्या होता है जब आईडी "लक्ष्य" मौजूद नहीं होता है? Jquery इस तरह के मामले को कैसे संभालता है?

अब, जब भी मैं अपनी वेबसाइट पर काम करता हूं, ऐसा लगता है जैसे फ़ायरफ़ॉक्स का मेमोरी उपयोग पागल की तरह बढ़ता है। सुनिश्चित नहीं है कि यह केवल फ़ायरफ़ॉक्स है या नहीं, लेकिन अगर मेरे पास पृष्ठ पर तत्व नहीं है, तो क्या यह मौजूद तत्वों के लिए बाध्यकारी द्वारा स्मृति रिसाव का कारण बनता है?

दृश्य के पीछे क्या होता है बस उत्सुक है।

धन्यवाद!

+0

* "क्या होता है जब आईडी" लक्ष्य "मौजूद नहीं होता है?" * वही बात होती है जब आप एक खाली ऐरे को फिर से चालू करते हैं। कुछ भी तो नहीं। –

उत्तर

5

यदि कोई तत्व आपके चयनकर्ता से मेल नहीं खाता है, तो आपको एक खाली jQuery ऑब्जेक्ट मिलेगा (जिसमें कोई तत्व नहीं है)।
खाली jQuery ऑब्जेक्ट पर live() को छोड़कर किसी भी विधि को कॉल करना कुछ भी नहीं करेगा और संसाधनों को बर्बाद नहीं करेगा।

+0

क्या होता है जब आपके पास एक jQuery विधि है जो लाइव है? मेरे पास कुछ अजाक्स जांच के लिए भी है ... हालांकि प्रारंभिक ज्ञान के लिए धन्यवाद :) – user1110302

+0

@ user1110302: 'लाइव()' को कॉल करने से लाइव ईवेंट की वैश्विक सूची में चयनकर्ता और हैंडलर विधि जोड़ दी जाएगी, मामले में एक मिलान तत्व भविष्य में प्रकट होता है। यह 'लाइव() 'का पूरा बिंदु है। – SLaks

+3

@userrandomnumbers: ऑब्जेक्ट "लाइव" नहीं है, 'लाइव' विधि सिंटैक्टिक चीनी का एक बहुत ही अजीब टुकड़ा है (बहिष्कृत!)।'लाइव' दस्तावेज़ स्तर पर ईवेंट हैंडलर को जोड़ता है, इसलिए उन ईवेंट हैंडलर हमेशा जुड़े होते हैं, चाहे कोई मिलान तत्व हो या नहीं। आपको jQuery के नवीनतम संस्करण के साथ 'लाइव' का उपयोग नहीं करना चाहिए क्योंकि यह भ्रमित है, '$ (दस्तावेज़) .on (...) 'पसंद करें। –

2

jQuery हमेशा तत्वों की सूचियों पर काम करता है। जब चयनकर्ता कुछ भी मेल नहीं खाता है, तो आपको एक खाली सूची मिलती है, और छेड़छाड़ करने से कुछ भी नहीं होता है।

असंगत तत्वों के लिए घटनाओं को संलग्न करना वास्तव में कुछ भी नहीं करता है, इसलिए नहीं, यह स्मृति को लीक नहीं कर रहा है।

-1

जिस तरह से मैं इसे समझता हूं, $ ('# target') चयनकर्ता कुछ भी नहीं चुनता है, और इसलिए क्लिक किसी भी तत्व से बंधे नहीं होगा। यह किसी भी स्मृति मुद्दों या कुछ भी कारण नहीं होगा।

2

$() फ़ंक्शन विंडो में तत्वों के माध्यम से लूप होगा। यदि # लक्ष्य प्राप्त हुआ, तो ऑनक्लिक ईवेंट जोड़ा जाएगा।

यदि यह मौजूद नहीं है, तो कुछ नहीं होगा, तो आप एक खाली jQuery वस्तु

0

तत्व होना चाहिए कि यह सिर्फ कुछ भी करने के लिए बाध्य नहीं है और इसलिए इस पर क्लिक मौजूद नहीं होने का परिणाम मिल जाएगा ऐसा कुछ नहीं है जिस पर कोई प्रभाव नहीं पड़ेगा।

मैं यह भी इंगित करना चाहूंगा कि यदि तत्व AJAX के माध्यम से जोड़ा जाता है और आपने '# टाइटलाइट' तत्व को एक विशिष्ट क्लिक फ़ंक्शन पर बाध्य किया है, जैसे आपने पोस्ट कोड में किया है, तो AJAX कॉल से पहले यह नहीं होगा समारोह। उन मामलों में आप यह सुनिश्चित करने के लिए '.live' बाइंडिंग फ़ंक्शन का उपयोग करेंगे कि फ़ंक्शन तत्व से बंधे हैं। फ़ायरफ़ॉक्स भी एक मेमोरी हॉग है, इसकी स्मृति उपयोग के लिए पागल तेज़ी से बढ़ना बहुत आम है।

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