ओपी पोस्ट का जवाब, @ Rock'n'muse द्वारा सुझाए गए उत्तर के अलावा निश्चित रूप से अच्छे प्रस्ताव हैं, लेकिन दोनों एक महत्वपूर्ण और वांछित कार्यात्मक पहलू को याद करते हैं।
जब समाधान @Mat द्वारा दिए गए का उपयोग और @ Rock'n'muse से change
-vice- close
सुझाव को लागू करने, आपके द्वारा लिखा गया-इन मूल्य वास्तव में विजेट से साफ करता है, तो कोई चयन फ़िल्टर किए गए डेटा स्रोत से बनाया गया है। यह भी खूब रही; हालांकि, यदि उपयोगकर्ता कुछ मान्य टाइप करता है और फ़िल्टर की गई सूची से कोई मान चुनता है, तो फिर कर्सर को मान के अंत में रखता है और मान को अमान्य करता है (किसी भी वैध चयन को वापस नहीं करता है डेटा स्रोत), टाइप-इन मान विजेट से साफ़ नहीं किया गया है।
क्या हो रहा है यह है कि isValid
मान true
रहता है यदि पहले टाइप किए गए (और मान्य) मान को बदला जाना चाहिए। इसका समाधान फ़िल्टरिंग ईवेंट ट्रिगर होने पर isValid
से false
पर सेट करना है। जब उपयोगकर्ता टाइप किए गए मान को बदलता है, तो विजेट टाइप किए गए मान की खोज में डेटा स्रोत को फ़िल्टर करने का प्रयास करता है। isValid
से false
पर सेट करने के साथ ही filter
ईवेंट ट्रिगर किया गया है change
ईवेंट के लिए "क्लीन स्लेट" सुनिश्चित करता है जैसा कि @ Rock'n'muse से समाधान द्वारा सुझाया गया है।
क्योंकि हम जैसे ही filtering
घटना शुरू हो रहा है गलत पर isValid
स्थापित कर रहे हैं, हम (से पहले उपयोगकर्ता कभी विकल्प देख सकेंगे चयन करने के लिए डेटा स्रोत को छानने होने चाहिए के रूप में) open
घटना में ऐसा करने की जरूरत नहीं है । इस वजह से, open
ईवेंट बाध्यकारी @ मैट के समाधान से हटा दिया गया था। इसका अर्थ यह भी है कि isValid
की घोषणा पर false
का आरंभिक असाइनमेंट अनिवार्य है, लेकिन घोषणा पर परिवर्तनीय असाइनमेंट हमेशा एक अच्छा विचार है। ,
var isValid = false;
$("#staton").kendoAutoComplete({
minLength: 2,
dataTextField: "name",
select: function() {
valid = true;
},
change: function (e) {
// if no valid selection - clear input
if (!valid) {
e.sender.value("");
}
},
filtering: function() {
valid = false;
},
dataSource: datasource
});
एक परिशिष्ट के रूप में स्थापित है और एक का मूल्यांकन करने के लिए बाध्य select
घटना का उपयोग कर:
नीचे लागू किया @ Rock'n'muse से और filtering
कार्यान्वयन के साथ सुझावों के साथ @Mat से समाधान है @Mat प्रस्तावों के रूप में सरल बूलियन मान अधिक डेटा स्रोत पर एक jQuery $.each(...)
का उपयोग करने से क्लीनर, सरल और तेज़ है ताकि यह सुनिश्चित किया जा सके कि टाइप किए गए मान change
ईवेंट के भीतर डेटा स्रोत की वास्तविक वस्तु से मेल खाते हैं। @Mat (इस पृष्ठ) से समाधान मिलने से पहले समाधान बनाने में मेरा पहला विचार था और यह मेरा समाधान और उसके प्रश्न को अप-वोट करने का मेरा तर्क है।
इस विधि का उपयोग करते हुए, यदि कोई उपयोगकर्ता वैध चयन नहीं करता है, तो जो भी उन्होंने ऑटोकंपलेट में टाइप किया है उसे 'ऑनब्लूर' साफ़ कर दिया गया है जिसके परिणामस्वरूप मैं – Mat
के बाद हूं, मेरे परीक्षणों में " बंद करें "ईवेंट को निकाल दिया नहीं गया है यदि उपयोगकर्ता ने एक मान टाइप किया जो सर्वर से 0 तत्व लौटाता है। यही है, मैं टाइपिंग शुरू करता हूं "1234 .." जो सर्वर से कुछ भी नहीं लाता है और फिर टेक्स्ट फ़ील्ड से बाहर निकलता है, "करीबी" घटना नहीं निकाल दी जाती है :-( – Dror
यह सही जवाब नहीं है। आपको "परिवर्तन" का उपयोग करना चाहिए घटना, "बंद" नहीं। – ataravati