Остановка автозаполнения при нажатии пользователем «Enter» - PullRequest
1 голос
/ 20 сентября 2009

Я использую AutoCompleteExtender на коммерческом сайте. Моя проблема в том, что пользователи быстро набирают часть слова и сразу нажимают «Ввод», что заставляет элемент управления автозаполнения НЕ возвращаться со списком предложений. Например, если в моей базе данных есть фраза «Техас, США», но пользователи просто быстро набирают «Техас», а затем «Ввод», выпадающий список не появляется.

Я хотел бы, чтобы элемент управления AutoComplete игнорировал тот факт, что пользователь нажал клавишу Enter, и в любом случае извлекал предложенные данные. (Конечное значение будет иметь место, если он проигнорирует Enter, когда в данный момент нет списка, но выберет элемент, когда был список).

Я могу смоделировать эту проблему, перейдя в раздел примеров на этом сайте Microsoft ASP.NET и очень быстро набрав несколько символов, после чего нажмите «Enter».

Пожалуйста, кто-нибудь может мне сказать, что мне нужно делать?

Спасибо, Мартин

Ответы [ 2 ]

3 голосов
/ 07 октября 2009

Раньше я обходил эту проблему с помощью дополнительного обработчика нажатия клавиш в текстовом поле, которое является целью автозаполнения. Замените this._autoCompleteBehavior в приведенном ниже фрагменте ссылкой на ваш экземпляр AutoCompleteBehavior (доступный через $find() и BehaviorID). Идея здесь состоит в том, чтобы заставить поведение автозаполнения думать, что оно должно выполнить поиск, вызывая _onTimerTick(), который выполняется после того, как задержка ввода истекла. По умолчанию задержка ввода отменяется нажатием клавиши ввода, так что в любом случае это просто вызывает поиск при вводе или табуляции.

Отказ от ответственности: мой хак ссылается на «приватные» члены кода AjaxControlToolkit (материал, начинающийся с подчеркивания - «приватный»), поэтому, вероятно, он не гарантирован для будущего.

_searchTextbox_keydown: function(e)
{
    var key = e.keyCode || e.rawEvent.keyCode;

    // If the user hits enter or tab before the auto complete popup appears, force the autocomplete lookup at that moment.        
    if ((key === Sys.UI.Key.enter || key === Sys.UI.Key.tab) && this._autoCompleteBehavior._currentPrefix != this._autoCompleteBehavior._currentCompletionWord())
    {
        this._autoCompleteBehavior._onTimerTick(this._autoCompleteBehavior._timer, Sys.EventArgs.Empty);

        e.preventDefault();
    }
}
0 голосов
/ 22 сентября 2009

Эй, попробуйте jQuery или расширитель автозаполнения YUI. Это будет молниеносно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...