मुझे jQuery के स्वत: पूर्ण विजेट को मेरे लिए काम करने में बहुत परेशानी हो रही है। मैं एक सर्वर से कुंजी/मूल्य जोड़े की एक सूची का उपयोग कर रहा हूँ। उपयोगकर्ता विजेट से कोई मान का चयन करता हैjQuery UI स्वत: पूर्ण हाइब्रिड टेक्स्ट/आईडी खोज
हैं, मैं सर्वर से आईडी पास करना चाहते हैं:
मैं निम्नलिखित आवश्यकताओं है।
यदि उपयोगकर्ता कोई मान नहीं चुनता है और कच्चे पाठ में प्रवेश करता है, या पहले से ही चुना गया मान संशोधित करता है, तो मैं चाहता हूं कि आईडी फ़ील्ड को साफ़ किया जाए और केवल कच्चे पाठ को सर्वर पर भेजा जाए।
मान लें कि someAjaxFunction
ऑब्जेक्ट्स की एक सरणी देता है जो स्वत: पूर्ण विजेट अपेक्षा करता है: {label:label, value:key}
। , यहां तक कि वस्तुओं में से एक पर मँडरा अंतर्निहित कुंजी करने के लिए $ (इनपुट) द्वारा संदर्भित पाठ बॉक्स में पाठ में परिवर्तन द्वारा
$(input).autocomplete({
source: sourceFunction,
minLength: 1
});
चयन बदलना:
शुरू में मैं सेट स्वत: पूर्ण इसलिए तरह विजेट लेबल के बजाए। यह एक उपयोगकर्ता इंटरैक्शन दृष्टिकोण से बेहद अवांछनीय है - असल में, मैं इसकी जांच क्यों कर रहा हूं इसका कारण यह है कि जिस साइट पर मैं निर्माण कर रहा हूं, उसके उपयोगकर्ता लगातार उस पाठ द्वारा परेशान थे जो वे यादृच्छिक संख्या में बदल रहे थे!
मैं पाठ बॉक्स के तहत एक छिपी हुई फ़ील्ड जोड़ा गया है और) का चयन कार्यान्वित (और ध्यान() की घटनाओं के क्रम इतना की तरह आईडी क्लोक करने के लिए:
$(input).autocomplete({
source: sourceFunction,
minLength: 1
focus: function(event, ui) {
$(idField).val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
select: function(event, ui) {
$(idField).val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
minLength: 1
});
यह अच्छी तरह से काम करता है जब उपयोगकर्ता के लिए चिपके हुए है स्वत: पूर्ण ड्रॉप-डाउन द्वारा प्रदान की गई स्क्रिप्ट। आईडी क्लोक किया गया है और सर्वर पर सही ढंग से सबमिट किया गया है। दुर्भाग्यवश, यदि उपयोगकर्ता बॉक्स में कुछ फ्रीफॉर्म टेक्स्ट दर्ज करना चाहता है और उस मान के आधार पर खोज, आईडी फ़ील्ड रीसेट नहीं है और पहले चयनित आईडी सर्वर पर सबमिट हो जाती है। यह भी भ्रमित है।
jQuery यूआई स्वत: पूर्ण प्रलेखन एक change
घटना को सूचीबद्ध करता है और कहा गया है ui
तर्क के item
संपत्ति चयनित आइटम पर निर्धारित किया जाएगा कि। मैंने सोचा कि मैं छिपी हुई आईडी फ़ील्ड को एक कुंजी प्रेस पर रीसेट कर सकता हूं और स्वत: पूर्णता बदलकर आईडी को फिर से पॉप्युलेट कर सकता हूं। दुर्भाग्यवश, कीप्रेस घटना के अलावा, को को आईडी को रीसेट नहीं करना चाहिए, return false
उपरोक्त select
ईवेंट में स्टेटमेंट को टेक्स्ट बॉक्स में टेक्स्ट प्रबंधित करने के लिए जरूरी है, change
ईवेंट को ui होने से रोकता है सही ढंग से असाइन किया गया।
तो अब मैं अटक गया हूं - मुझे वास्तव में पता नहीं है कि मैं विजेट समर्थन कार्यक्षमता बनाने के लिए और क्या प्रयास कर सकता हूं, ऐसा लगता है कि इसे डिफ़ॉल्ट रूप से समर्थन देना चाहिए। या तो यह प्रक्रिया उससे कहीं अधिक जटिल है, या मुझे कुछ सचमुच स्पष्ट याद आ रही है। मैंने सभी उपलब्ध घटनाओं और सभी उदाहरणों के माध्यम से चुना है और खाली हाथ आ गया है। वास्तव में, jQuery UI पृष्ठ पर "कस्टम डेटा और डिस्प्ले" उदाहरण भी इस समस्या से पीड़ित है।
मैं इसके लिए कवर करने के लिए सर्वर की ओर कुछ हैक्स जोड़ सकता हूं, लेकिन मैं वास्तव में क्लाइंट स्तर पर ऐसा करने में सक्षम होना पसंद करूंगा।
मैं किसी अन्य पर स्विच करने के बजाय jQuery UI स्वत: पूर्ण विजेट से चिपकना पसंद करूंगा।
क्षमा करें, क्या मैं कुछ स्पष्टीकरण दे सकता हूं? आपकी कम से कम एक समस्या यह है कि आप आईडी बॉक्स को * या * संबंधित आईडी से भरना चाहते हैं यदि उपयोगकर्ता उस मान में प्रवेश करता है जिसमें संबंधित आईडी है, या जो भी उपयोगकर्ता टाइप कर रहा है यदि कोई संबंधित मूल्य नहीं है - सही/गलत? – Stephen
नहीं, मैं बस छिपी हुई आईडी फ़ील्ड खाली होना चाहता हूं यदि टेक्स्ट बॉक्स में टेक्स्ट उस पर सेट किया गया है जो स्वत: पूर्ण द्वारा ऑफ़र किए गए चयन से मेल नहीं खाता है। – Shabbyrobe