我在商业网站上使用AutoCompleteExtender。我的问题是用户正在快速键入一个单词的一部分并立即按“Enter”导致AutoComplete控件 NOT 返回一个建议列表。例如,如果我的数据库中包含短语“Texas,United States”,但用户只需快速键入“Texas”,然后输入Enter,则下拉列表不会出现。
我想要的是AutoComplete控件忽略用户按下Enter的事实,然后去取得建议的数据。 (如果在当前没有列表的情况下忽略了Enter,则会忽略Enter,但在列表中选择了一个项目)。
我可以通过转到此Microsoft ASP.NET站点的示例部分并快速键入一些字符,然后按“Enter”来模拟这个确切的问题。
有人可以告诉我我需要做什么吗?
谢谢,马丁
答案 0 :(得分:3)
我已经破解了这个问题,之前在文本框上有一个额外的keydown处理程序,它是自动完成的目标。将以下代码段中的this._autoCompleteBehavior
替换为对您的AutoCompleteBehavior实例的引用(可通过$find()
和BehaviorID
获得)。这里的想法是强制自动完成行为认为它需要通过调用_onTimerTick()
执行查找,该_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();
}
}
在键入延迟过期后执行。默认情况下,通过按Enter键取消键入延迟,因此这只会在输入或选项卡上强制执行查找。
免责声明:我的hack引用了AjaxControlToolkit代码的“私有”成员(以下划线开头的东西是“私有”),所以它可能不能保证是面向未来的。
{{1}}
答案 1 :(得分:-1)
嘿尝试jQuery或YUI自动完成扩展程序。它会闪电般快速。