【问题标题】:AutoComplete Stopping When User Presses "Enter"用户按“Enter”时自动完成停止
【发布时间】:2010-11-29 19:03:44
【问题描述】:

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

我希望 AutoComplete 控件忽略用户按下 Enter 并继续获取建议数据的事实。 (最终是如果它在当前没有列表时忽略 Enter,但在有列表时选择一个项目)。

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

请有人告诉我我需要做什么?

谢谢,马丁

【问题讨论】:

  • 您的前提可能存在缺陷。输入几个字符并按 Enter 键的用户很清楚他们想要什么。当他们认为自己不需要列表时,为什么要强迫他们查看列表?
  • 有几个场景你想强迫他看到它,即在你希望他们看到的唯一位置/标签的情况下,例如它不是德克萨斯州而是德克萨斯州联合状态或它不是 ajaxcontroltool 而是 ajaxcontroltoolkit
  • 从我目前看到的情况来看,自动完成控件尝试尽可能懒惰地获取数据,以免加载服务器和带有大量请求的 javascript,因此一旦您停止按键他们告诉你答案。 Martin 的要求恰恰相反,急切地搜索和显示结果。
  • 是的,我希望用户准确地选择他们想要的位置(这个问题可以在 www.ReviewYourRental.com 看到)所以我总是希望位置列表出现,即使用户有按“输入”。我注意到 HotelClub 将用户带到包含最近匹配城市列表的第二页,但我更愿意跳过第二页并在第一个搜索页面上获取正确的位置。因此,我真的需要解决这个“输入”关键问题!任何技术解决方案将不胜感激。

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


【解决方案1】:

我之前在作为自动完成目标的文本框上使用了一个额外的 keydown 处理程序解决了这个问题。将下面 sn-p 中的 this._autoCompleteBehavior 替换为对您的 AutoCompleteBehavior 实例的引用(可通过 $find()BehaviorID 获得)。这里的想法是通过调用_onTimerTick() 来强制自动完成行为认为它需要执行查找,该查找在键入延迟到期后执行。默认情况下,键入延迟会通过按 enter 键取消,因此这只会强制在 enter 或 tab 上进行查找。

免责声明:我的 hack 引用了 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();
    }
}

【讨论】:

  • 要使 $find("AutoCompleteEx") 工作,您需要在 AutoCompleteExtender xml 标签上设置 BehaviorID="AutoCompleteEx"
【解决方案2】:

嘿,试试 jQuery 或 YUI 自动完成扩展器。这将是闪电般的速度。

【讨论】:

  • 不,这不是我追求的速度,因为 AJAX 自动完成很好。事实上,当用户按下“Enter”时,列表不会出现。
猜你喜欢
  • 2011-09-11
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 2022-07-09
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
相关资源
最近更新 更多