【问题标题】:JavaScript autocomplete upon typing键入时 JavaScript 自动完成
【发布时间】:2011-01-29 19:57:59
【问题描述】:

对的人,我发现的所有自动完成插件和功能,它们只会在按键向上/向下等时更新。这很好,但是只有在用户停止输入并且他们正在输入短语或word,脚本无法立即开始提示等。

我知道这对你们中的一些人来说是一个非常简单的修复或建议,所以如果我能在按下键时立即将其转换为任何帮助,我将不胜感激。

所需效果的一个示例是 Google Suggest 或 Facebook 搜索,每次按键或更改都会立即触发搜索,我该如何模拟?

谢谢!

【问题讨论】:

    标签: javascript jquery autocomplete jquery-autocomplete


    【解决方案1】:

    这是你的意思吗?还是您希望 Ajax 从数据库中检索?

    var data = "Core Selectors Attributes Traversing Manipulation CSS Events Effects Ajax Utilities".split(" ");
        $("#example").autocomplete(data);
    

    JQuery

    编辑:我不确定我明白你的意思,因为这个示例似乎与 Google Suggest 或 Facebook 的工作方式相同。如果您的数据库很小,您可以在页面加载时将缓存下载到可变数据中。如果您的数据库稍大,您将缓存限制为每个字母字符或字符系列的响应数为 X。 (即 WHERE city LIKE 'aa%' LIMIT 10 AND WHERE...)

    【讨论】:

    • 这不是我的问题。我可以通过 AJAX 检索,这不是问题。我只是在问我如何能够在文本更改时立即触发事件,而不是在按键结束时。目前的方式很慢,不能提供即时响应。
    【解决方案2】:

    这取决于您搜索的空间有多大以及您的服务器有多好。 Facebook 搜索(我假设是人名)很快,因为您实际上只搜索了一千个左右的联系人。 Google 速度很快,因为他们在基础设施上投入了大量资金并缓存了大量响应。

    在我的一个项目中,我使用了this jQuery 插件,它在缓存结果方面提供了出色的性能。我们使用它在大约 6K 联系人(姓名等)的列表上提供自动完成功能。这是你的想法吗?

    【讨论】:

      【解决方案3】:

      Wicket Web 框架具有“节流”行为的概念。通常,Wicket 应用程序中的 AJAX 请求会根据“ajax 通道”排队,如果没有请求正在运行,它会立即触发请求。如果一个请求已经在运行,下一个请求会排队,并在当前请求返回时触发。

      “限制”让行为本身延迟一定的时间(例如,两秒)。如果该行为在同一时期再次触发,则最近行为的回调将替换当前排队行为的回调。 (例如,用户开始输入“albuquerque”,触发事件“A”,然后是“AL”,然后是“ALB”。系统可能会触发“A”,然后是“ALB”,跳过“AL”,因为它是坐在队列中时被“ALB”替换。)这样做的目的是在每次按键时立即触发一个行为,但防止服务器被不必要的请求淹没。

      查看 wicket ajax 源代码: https://github.com/apache/wicket/blob/wicket-1.4.8/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js

      有关 Web 框架的更多信息,请参阅: http://wicket.apache.org

      【讨论】:

      • 我认为您描述的行为的正确术语(如果行为在同一时期再次触发,则最近行为的回调将替换当前排队行为的回调。)是“去抖动” ,电气工程中的一个术语,用于消除开关中的机械颤动。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多