2010-11-28 15 views
28

में काम कर रहे $ (यह) नहीं मिल रहा है मैं jQueryUI का उपयोग कर एक सामान्य स्वत: पूर्ण स्क्रिप्ट बनाने की कोशिश कर रहा हूं। स्वत: पूर्ण हर के लिए काम करना चाहिए:jQueryUI स्वत: पूर्ण

<input type='text' class='autocomplete' id='foo'/> 
<input type='text' class='autocomplete' id='bar'/> 
... 

अब मैं $ (इस) का उपयोग कर 'foo' या 'बार' स्रोत समारोह में उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन जब चेतावनी मैं हमेशा मिलता है 'अनिर्धारित'।

$('input.autocomplete').autocomplete({ 
    source: function(req, add){ 
     var id = $(this).attr('id'); 
     alert(id); 
    } 
}); 

मैं क्या गलत कर रहा हूं?

+0

? चयनित स्वत: पूर्ण की आईडी के आधार पर स्रोत चुनने के लिए? – jcolebrand

+2

वह जो भी फ़ील्ड आईडी पास हो गया है उसे स्वत: पूर्ण करने के लिए एक सामान्य func बनाना चाहता है। – Hollister

+0

@ होलीस्टर, धन्यवाद, लेकिन यह स्पष्ट नहीं किया गया। क्या आप अक्सर "मदद" करते हैं? ऑटोकॉम्प्लेट से जुड़े तत्व के आधार पर स्रोत को चुनने की आवश्यकता क्यों है? ऐसा लगता है कि प्रत्येक ऑटोकॉम्प्लेट तत्व के लिए एक बार कोडब्लॉक बनाने की आवश्यकता होती है, या एक बार प्रत्येक प्रकार के कोडब्लॉक के लिए। स्रोत नियंत्रण परिभाषा संरचना के भीतर यदि ब्लॉक को डालने से यह नहीं होता है, तो आप DRY कैसे करते हैं।यह सिर्फ अधिक जटिल कोड बनाता है। – jcolebrand

उत्तर

52

प्रासंगिक तत्व के संदर्भ को बंद करने के लिए बंद करने के उपयोग से आपके चयन में प्रत्येक आइटम के लिए अलग-अलग सेटअप स्वतः पूर्ण करें। निम्नलिखित की तरह कुछ:

$('input.autocomplete').each(function(i, el) { 
    el = $(el); 
    el.autocomplete({ 
     source: function(req, add) { 
      var id = el.attr('id'); 
      alert(id); 
     } 
    }); 
}); 

वैकल्पिक (संपादित करें)

मैं नहीं दिख रहा है यही कारण है कि each() उपयोग करने के लिए इस तरह के प्रतिरोध है: यह काम करता है, कोड बहुत ही स्पष्ट और पठनीय है, और यह दक्षता के साथ कोई समस्या नहीं पेश करता है; लेकिन यदि आप each() से बचने के लिए निर्धारित हैं, तो यहां एक विकल्प है ...

* कृपया ध्यान दें: निम्नलिखित दृष्टिकोण jQuery Autocomplete के आंतरिक पर निर्भर करता है (इसलिए थोड़ा पहले) मैं पहले विकल्प की सिफारिश करता हूं .. लेकिन पसंद तुम्हारा है।

$('input.autocomplete').autocomplete({ 
     source: function(req, add) { 
      var id = this.element.attr('id'); 
      alert(id); 
     } 
    }); 
}); 

काम करेंगे कि, कम से कम जब तक/जब तक कि वे जिस तरह से source() समारोह autocomplete प्लगइन के भीतर से कहा जाता है बदल जाते हैं।

तो, आपके पास दो विकल्प हैं ... हर किसी के लिए कुछ।

+0

@drachenstern: विस्तृत करने के लिए देखभाल? मेरा समाधान * काम करेगा। – Lee

+0

यह काम कर सकता है, लेकिन मुझे लगता है कि प्रत्येक एक खराब रूप है। यदि कोई बेहतर विकल्प है तो काम करने के लिए अब स्रोत को देख रहे हैं। – jcolebrand

+0

बस इसका परीक्षण किया और यह काम करता है। अभी तक सुनिश्चित नहीं है कि यह सबसे अच्छा समाधान है या नहीं। – bart

0

$(this) आपके नव निर्मित फ़ंक्शन से आएगा और इस प्रकार काम नहीं करेगा। source से ऊपर की घोषणा को ले जाएं और इसे काम करना चाहिए।

+3

द्वारा सुझाए गए अनुसार वह "स्रोत" से ऊपर $ (यह) नहीं डाल सकता है क्योंकि यह विकल्प सूची में रखेगा, जो वह चाहता है उतना नहीं। – jcolebrand

0

मारवेलिन सही है। 'यह' आपके द्वारा बनाए गए नए बनाए गए फ़ंक्शन का संदर्भ देगा। यह फ़ंक्शन के बाहर var id बनाकर और फ़ंक्शन के भीतर इसका उपयोग करके आसानी से ठीक किया जा सकता है।

2

कि इनपुट तत्व आपको निम्न कार्य करने में सक्षम होना चाहिए पहुंचने के लिए:

$(this.element).val(); 
बेशक

, बस मूल्य हो जाता है कि। तुम इतनी तरह अन्य विशेषताओं का उपयोग कर सकते हैं:

$(this.element).attr('value'); // just another way to get the value 
$(this.element).attr('id'); 

इसके अलावा, मान लीजिए आप select event में उस तत्व का उपयोग करना चाहते हैं, तो आप कि इतने की तरह कर सकते हैं: आशय क्या है

$(event.target).attr('value'); 
$(event.target).attr('id'); 
संबंधित मुद्दे