用户按“Enter”时自动完成停止

时间:2009-09-19 21:41:21

标签: asp.net .net-2.0 autocomplete ajaxcontroltoolkit

我在商业网站上使用AutoCompleteExtender。我的问题是用户正在快速键入一个单词的一部分并立即按“Enter”导致AutoComplete控件 NOT 返回一个建议列表。例如,如果我的数据库中包含短语“Texas,United States”,但用户只需快速键入“Texas”,然后输入Enter,则下拉列表不会出现。

我想要的是AutoComplete控件忽略用户按下Enter的事实,然后去取得建议的数据。 (如果在当前没有列表的情况下忽略了Enter,则会忽略Enter,但在列表中选择了一个项目)。

我可以通过转到此Microsoft ASP.NET站点的示例部分并快速键入一些字符,然后按“Enter”来模拟这个确切的问题。

有人可以告诉我我需要做什么吗?

谢谢,马丁

2 个答案:

答案 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自动完成扩展程序。它会闪电般快速。