আমি 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 );
},
টাইমার ব্যবহারের কারণটি হ'ল ইউআই আপডেট হওয়ার সুযোগ পায়। জাভাস্ক্রিপ্টটি যখন ইউআই চলছে তখন আপডেট করা যাবে না, তাই বিলম্ব ফাংশনে কল। এটি অন্যান্য পরিস্থিতিতে যেমন টেক্সটবক্সে ফোকাস রাখা (সেই কোড দ্বারা ব্যবহৃত) এর জন্য ভাল কাজ করে।
সুতরাং আপনি হয় উইজেট ব্যবহার করতে পারেন বা কোডটি নিজের উইজেটে অনুলিপি করতে পারেন যদি আপনি jQuery UI ব্যবহার করেন না (বা আমার ক্ষেত্রে একটি কাস্টম উইজেট বিকাশ করছে)।