Прежде чем продемонстрировать выпадающий список с подск надо внести изменения в функции, которые были описаны выше.
Первое изменение заключается в добавлении второго аргумента ж] ду autosuggest(), определяющему необходимость активизации ф5 автодополнения (скоро мы объясним, зачем это надо). Разуме тод typeAhead() должен вызываться только в том случае, если в i гументе содержится значение true. Если есть хотя бы одна поде функция автодополнения должна быть задействована и выш список должен быть отображен на экране, для чего вызывается i showSuggestionsQ. При отсутствии подсказок список надо скрь звав метод hideSuggestions():
; AutoSuggestControl. prototype, autosuggest - function (aSuggestions, bTyp
if (aSuggestions.length > 0) { if (bTypeAhead).{
this.typeAhead(aSuggestions[0]>;
this.showSuggestions(aSuggestions);
} else { " -
this.hideSuggestions();
};
Кроме того, необходимо внести изменения в метод handleKeytlp() по со¬вершенно иным причинам. Первая заключается в необходимости добав¬ления аргумента bTypeAhead к методу requestSuggestions(). При вызове из этого места в этом аргументе всегда будет передаваться значение t rue:
AutoSuggestControl.prototype.handleKeyUp = function (oEvent) {
var iKeyCode = oEvent.keyCode;
if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode <= 46)
|| (iKeyCode >= 112 && iKeyCode <= 123)) {
// игнорировать } else {
this, provider. requestSiiggestions(this. true);
};
He забывайте, что метод requestSuggestionsO определен в классе по¬ставщика подсказок, который будет описан позднее в этой же главе.
Измененный вариант метода работает точно так же, как и прежде, но у нас имеется несколько кодов клавиш, которые требуют специальной обработки: Backspace и Delete. Когда нажимается одна из этих клавиш, мы не должны активизировать функцию автодополнения, потому что она будет тормозить процесс удаления символов. Однако нет никаких причин, которые вынуждали бы нас скрывать выпадающий список с подсказками. Нажав клавишу Backspace (код 8) или Delete (код 46), вы можете вызвать requestSuggestions(), но на этот раз со значением false, чтобы указать, что функция автодополнения не должна быть задейст¬вована:
AutoSuggestControl.prototype.handleKeyUp = function (oEvent) { var iKeyCode = oEvent.keyCode;
if (iKeyCode == 8 11 iKeyCode ==46) {
this.provider.requestSuggestions(this, false);
} else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123)) { // игнорировать } else {
this.provider.requestSuggestions(this, true);
}
Теперь при удалении пользователем символов список подсказок по-прежнему отображаться, и пользователь сможет выбирать списка. Такое поведение вполне приемлемо, но в реальном пр нии функция автодополнения все-таки должна реагировать на тия клавиш.