Когда пользователь нажимает клавишу, метод handlrKeyUpO запраши¬вает новый список подсказок, поэтому вполне может возникнуть во¬прос: «Успеет ли он получить новые подсказки, если символы будут вводиться достаточно быстро?». Ответ отрицательный, и он может вас удивить. Однако если пользователь вводит символы достаточно быст¬ро, приложение будет получать подсказки с опозданием, вызывая у пользователя неприятные ощущения. Как же ликвидировать этот недостаток и не лишить пользователей, хорошо владеющих клавиату¬рой, удобных функциональных возможностей?
Все довольно просто: надо выждать некоторое время, прежде чем за¬прашивать подсказки с сервера. Это можно сделать с помощью метода setTimeout(), который задерживает вызов функции на заданный интер¬вал времени. В обновленном виде приложение будет работать следую¬щим образом: идентификатор таймера будет сохраняться в объекте AutoSuggestControl. Если какая-либо клавиша будет нажата до истече¬ния времени задержки, то существующий таймер будет сброшен и бу¬дет восстановлено новое время задержки. Таким образом, после нажа¬тия клавиши приложение некоторое время ждет и только потом запра¬шивает подсказку. Если во время паузы будет нажата новая клавиша, первый запрос будет аннулирован (сбросом таймера) и будет заплани¬рован новый запрос, через тот же промежуток времени. Это позволяет гарантировать, что запросы будут разделены достаточно длительными паузами между нажатиями клавиш.
Для реализации этого алгоритма в первую очередь надо завести свой¬ство, в котором будет храниться идентификатор таймера. Свойство ti-meoutld добавляется в класс так:
function AutoSuggestControl(oTextbox, oProvider) { this.cur = -1; this.layer = null; this.provider = oProvider; this.textbox = oTextbox;
this, timeoutld = null; '
this.userText = oTextbox.value; this.initO;
}
Затем надо дополнить метод handleKeyUp() новым свойством:
В первой новой строке сохраняется ссылка на объект this. Эта потребуется при вызове функции setTimeout(). Во второй новой сбрасывается таймер, который уже был запущен ранее; сброс аннулирует запрос на получение новых подсказок, который быть запланирован. Другие два фрагмента планируют вызов requestSuggestionsO через 250 миллисекунд (такой задержки достаточно). Каждый вызов оформляется в виде анонимной ф которая и передается функции set-Timeout О. Полученный от out () идентификатор таймера сохраняется в новом свойстве В целом этот новый программный код гарантирует, что ни один не будет сделан ранее чем через 250 миллисекунд после после жатия клавиши.На этом мы заканчиваем реализацию класса AutoSuggestCont rol. Все не¬обходимые функции класса реализованы, и нам осталось лишь создать класс поставщика подсказок.

Матрасы ортопедические эффект. Магазин матрацев и производство. . Бесплатные персональные гороскопы - гороскоп на сегодня . тендер