मैं jQuery UI स्वतः पूर्ण विजेट पर एक नज़र डालने की सलाह दूंगा। उन्होंने अधिकांश मामलों को वहां से संभाला क्योंकि उनका कोड आधार वहां के अधिकांश लोगों की तुलना में अधिक परिपक्व है।
नीचे एक डेमो पेज का लिंक दिया गया है ताकि आप यह सत्यापित कर सकें कि यह काम करता है। http://jqueryui.com/demos/autocomplete/#default
आपको स्रोत पढ़ने और यह देखने का सबसे अधिक लाभ मिलेगा कि उन्होंने इसे कैसे हल किया। आप इसे यहां देख सकते हैं: https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.autocomplete.js ।
मूल रूप से वे यह सब करते हैं, वे बांधते हैं input, keydown, keyup, keypress, focus and blur
। फिर उनके पास सभी प्रकार की चाबियों के लिए विशेष हैंडलिंग है page up, page down, up arrow key and down arrow key
। टेक्स्टबॉक्स की सामग्री प्राप्त करने से पहले एक टाइमर का उपयोग किया जाता है। जब एक उपयोगकर्ता एक कुंजी टाइप करता है जो कमांड (अप की, डाउन की और इतने पर) के अनुरूप नहीं होता है तो एक टाइमर होता है जो लगभग 300 मिली सेकेंड के बाद सामग्री की खोज करता है। यह कोड में इस तरह दिखता है:
// switch statement in the
switch( event.keyCode ) {
//...
case keyCode.ENTER:
case keyCode.NUMPAD_ENTER:
// when menu is open and has focus
if ( this.menu.active ) {
// #6055 - Opera still allows the keypress to occur
// which causes forms to submit
suppressKeyPress = true;
event.preventDefault();
this.menu.select( event );
}
break;
default:
suppressKeyPressRepeat = true;
// search timeout should be triggered before the input value is changed
this._searchTimeout( event );
break;
}
// ...
// ...
_searchTimeout: function( event ) {
clearTimeout( this.searching );
this.searching = this._delay(function() { // * essentially a warpper for a setTimeout call *
// only search if the value has changed
if ( this.term !== this._value() ) { // * _value is a wrapper to get the value *
this.selectedItem = null;
this.search( null, event );
}
}, this.options.delay );
},
टाइमर का उपयोग करने का कारण यह है कि यूआई को अपडेट होने का मौका मिलता है। जब जावास्क्रिप्ट चल रहा है तो UI अपडेट नहीं किया जा सकता है, इसलिए देरी फ़ंक्शन को कॉल करता है। यह अन्य स्थितियों के लिए अच्छी तरह से काम करता है जैसे कि टेक्स्टबॉक्स पर ध्यान केंद्रित करना (उस कोड द्वारा उपयोग किया जाता है)।
तो आप या तो विजेट का उपयोग कर सकते हैं या कोड को अपने स्वयं के विजेट में कॉपी कर सकते हैं यदि आप jQuery UI (या मेरे मामले में कस्टम विजेट विकसित नहीं कर रहे हैं) का उपयोग नहीं कर रहे हैं।