2011-04-18 17 views
5

यदि मैं एक समारोह में parameter के रूप में selector पास करता हूं।क्या होता है जब एक jQuery चयनकर्ता नहीं मिला था?

// selector is an object 
function(selector) { 

    selector.trigger('eventHere'); 
} 

जाहिर है, event सक्रिय होगा कभी नहीं करता है, तो selector कि में पारित किया गया था इस event नहीं था, लेकिन मैं कुछ हालत ईवेंट सक्रिय करने से पहले जाँच करना चाहिए? मेरा मतलब है:

// selector is an object 
if(selector === 'matched'){ 
    // then fire the event 
} 
else{ 
    // do nothing 
} 

या बस इसे छोड़ दें ...?

+0

jQuery चयनकर्ता सादा तार हैं (उदा। 'Div.main h2 "') तो मुझे लगता है कि आप यह नाम किसी अन्य अवधारणा को दे रहे हैं। क्या आप स्पष्ट कर सकते हो? –

उत्तर

5

jQuery के बारे में अच्छी बात यह है कि अगर कोई चयनकर्ता मेल नहीं खाता है तो यह अपवाद नहीं फेंक देगा या त्रुटि का कारण नहीं होगा। तो आपको कुछ भी अतिरिक्त करने की ज़रूरत नहीं है;

// selector **must** be a jQuery object 
// the assumption here is that you've already done 
// var selector = $('selectorString'); elsewhere 
// and have invoked this function with selector 
function(selector){ 
    selector.trigger('eventHere'); 
} 

टिप्पणी तथापि है कि आप यह सुनिश्चित करना चाहिए कि selector एक jQuery वस्तु है क्या: यह एक सुरक्षित संचालन है! अन्यथा, आपको एक त्रुटि मिल सकती है जो दर्शाती है कि trigger कोई फ़ंक्शन नहीं है।

संपादित

एडम Terlson टिप्पणी में "अगर एक jQuery वस्तु रिक्त है या उसके खिलाफ एक समारोह के निष्पादन से पहले 0 की लंबाई है यह परीक्षण लायक हो सकता है कहते हैं। सिर्फ इसलिए कि यह फेंक नहीं होगा एक त्रुटि है कि प्रदर्शन मतलब यह नहीं है पहली जगह में यह क्रियान्वित नहीं (jQuery अभी भी कोशिश करता है) द्वारा प्राप्त नहीं किया जा सकता। "

भी एक jsperf परीक्षण से पता चलता है कि वहाँ ऑप्स में एक discernable अंतर है कि नहीं है/प्रत्येक तकनीक के लिए सेकंड (यह समय नहीं है! उसने मुझे पहले फेंक दिया) -की जांच/0-लम्बाई jQuery ऑब्जेक्ट फ़ंक्शन बनाम बस कॉल करने से पहले फ़ंक्शन का आह्वान करता है।

+1

आपके महान सुझाव के लिए एक फुटनोट के रूप में, यदि कोई jquery ऑब्जेक्ट शून्य है या उसके विरुद्ध फ़ंक्शन निष्पादित करने से पहले 0 की लंबाई है तो यह परीक्षण योग्य हो सकता है। सिर्फ इसलिए कि यह किसी त्रुटि को फेंक नहीं देगा, इसका मतलब यह नहीं है कि इसे पहले स्थान पर निष्पादित न करके प्रदर्शन प्राप्त नहीं किया जा सकता है (jQuery अभी भी प्रयास करता है)। –

+0

@Adam यह एक अच्छा विचार की तरह लगता है - लेकिन मुझे लगता है कि एक चयनकर्ता स्ट्रिंग के लिए मिलान ढूंढना jQuery के लिए सबसे महंगा ऑपरेशन होगा। तत्वों पर एक समारोह को आमंत्रित करना, एक बार मिला, अपेक्षाकृत सस्ती होना चाहिए। विचार? अन्यथा दिखाए गए संदर्भ/संख्याएं? मुझे यह जानने में दिलचस्पी होगी कि ऊपर दिए गए कोड में 'if (selector)' जोड़ने से सकारात्मक प्रभाव पड़ेगा। –

+0

@NoGood - कुछ प्रदर्शन समस्याओं की तुलना में प्रभाव _relatively_ छोटा है, लेकिन करने योग्य है। इसे साबित करने के लिए यहां एक jsperf परीक्षण है: http://jsperf.com/jquery-check-for-null-selector-or-just-perform-method2 मुझे क्रोम में पहले परिणाम के लिए परीक्षण करके 1 9% सुधार लाभ दिखाई देता है। –

1

बस घटना ट्रिगर ..

लेकिन चयनकर्ता चर वास्तव में एक jQuery वस्तु (वाक्य रचना के साथ आप का उपयोग करें) होना चाहिए।

0

यदि आप यह सुनिश्चित करना चाहते हैं कि ईवेंट केवल एक निश्चित तत्व प्रकार के लिए ट्रिगर किया जाएगा, तो आप ईवेंट को ट्रिगर करने से पहले इसे देख सकते हैं।

if (selector.is("type of element")) { 
    //then fire event 
} 

या आपको टैग नाम से यह जांच करने के लिए

if (selector.get(0).tagName=="tag name") { 
    //then fire event 
} 
+0

jquery के चयनकर्ताओं का पूरा बिंदु नहीं है जिसे आप पहले से ही जानते हैं? –

+0

ओपी के अनुसार, धारणा यह है कि फ़ंक्शन को चयनकर्ताओं (तत्वों) के लिए भी बुलाया जाएगा जो पंजीकृत ईवेंट का समर्थन नहीं करते हैं। –

+0

उस मामले में, 'selector.is ("तत्व का प्रकार")' हमेशा आपके उदाहरण में झूठी वापसी करेगा, और इसे फिर से चालू किया जाना चाहिए। –

4

jQuery हमेशा तत्वों की एक सरणी, भले ही चयनकर्ता सब पर कोई तत्व लौटे देता है, यह एक खाली सरणी में शामिल होंगे चाहते हैं।

आप अभी भी बिना किसी फेंकने वाले jQuery के उस रिक्त सरणी पर किसी भी फ़ंक्शन को निष्पादित कर सकते हैं, इसलिए जांचने की कोई आवश्यकता नहीं है कि लौटाए गए तत्व मौजूद हैं या नहीं।

यदि तत्व में ट्रिगर करने के लिए कोई ऐसी घटना नहीं है, फिर भी आप इसे ट्रिगर करने का प्रयास करते हैं, कुछ नहीं होगा, कोई अपवाद नहीं फेंक दिया जाएगा; जांच करने की कोई ज़रूरत नहीं है।

कृपया यह भी ध्यान दें कि यदि आप अपने ऑब्जेक्ट में चयनकर्ता को पास करने का आग्रह करते हैं, तो आपको चयनकर्ता का उपयोग करके ऑब्जेक्ट्स लाने की आवश्यकता है इससे पहले कि आप उनके साथ कुछ भी कर सकें।

function myTriggerFunction(selector) 
{ 
    var elements = $(selector); 
    elements.trigger('eventHere'); 
} 

myTriggerFunction('.WeWillBeTriggered'); 
1

jQuery वस्तु के निर्माण के किसी भी तत्व से मेल नहीं खाती है, तो यह अभी भी एक jQuery वस्तु लेकिन अंदर शून्य तत्वों के साथ हो जाएगा। JQuery ऑब्जेक्ट पर आपके द्वारा किए जाने वाले अधिकांश विधियां शून्य सहित किसी भी तत्व को संभाल सकती हैं, इसलिए यदि आप कुछ भी नहीं करना चाहते हैं तो आपको कोई जांच करने की आवश्यकता नहीं है।

यह केवल यदि आप जब संग्रह खाली है आप इसके लिए जाँच करने के लिए है कि कुछ खास करना चाहते हैं, और आप करते हैं कि length संपत्ति देख सकते हैं:

function(selection){ 
    if (selection.length > 0) { 
    selection.trigger('eventHere'); 
    } else { 
    // do something else because the selection was empty 
    } 
} 

नोट है कि एक "चयनकर्ता" है स्ट्रिंग जो आप निर्दिष्ट करते हैं कि jQuery ऑब्जेक्ट में कौन से तत्व डालना है, जैसे कोड #main स्ट्रिंग $('#main') कोड में, इसलिए एक jQuery ऑब्जेक्ट "चयनकर्ता" को कॉल करना भ्रमित हो सकता है।

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