2010-04-28 85 views
7

我已阅读了几篇讨论jQuery最佳自动完成插件的文章/问题/论坛。在尝试了几个好的之后,我发现大部分都有缺陷。jQuery/AJAX提前/自动完成

  1. 如果您正在查找国家并输入'In',则会显示一些国家/地区。 如果您继续输入I-n-d-i-a,则会导致5个AJAX调用(请参见http://www.freeimagehosting.net/uploads/6f1bcd69e1.png) ,这很自然,因为印度是In的子集,那么为什么再次调用?我们需要简单地过滤检索到的列表客户端。 任何人都知道这样的实现?

  2. Jquery自动完成功能的状态是什么?我在StackOverflow上读到它不再可用于Jquery;但除了链接到Autocomplete之外,Jquery网站还有一个“新”标记。

感谢

+0

听起来像是写一个更好的插件的机会。我想只有第一个例如10​​个回复才会返回,并且您需要重新查询以获取所有ind。但是,如果响应的数量少于阈值,那么应该按照您的建议重新使用这些响应。 – 2010-04-28 11:36:54

+0

这是一个非常好的观点,如果您只是在最后添加到您的查询中,则可以过滤掉所拥有的内容。是否有任何插件将这个想法考虑在内?差不多两年前这个问题被问到了,我很想知道答案。 – vbullinger 2012-04-12 14:59:15

回答

8

你写在可能是因为点:

  • 搜索 'In' shoudl返回了不少成果
  • 有一些限制就位而言,在服务器端永远不会返回超过N个结果
  • 这意味着完整的计数列表包含“In”未知,在客户端
  • 这意味着无法获得(肯定)对应于“Ind”没有其他Ajax请求的列表。

通常使用的半解决方案是在按键后立即不发送Ajax请求,但仅在100或200毫秒后发送。

这样,如果键入之前别的用户键入“Indi”快,并等待时,将只有1个Ajax请求,为“Indi(并没有为“In”,“Ind”)

+0

哦,是的,我已经这样做了,以减少请求的数量。您讨论的场景是有效的,但可以定义参数以避免这种不理想的行为。 – Prasad 2010-04-28 11:56:14

3

在新版本1.8中添加了jQuery UI自动完成功能,所以我在项目活动中看到它仍在开发中。有一个example使用关于您解释的问题的客户端缓存。您也可以使用已经提到的延迟选项。

+0

很高兴知道他们会继续使用自动完成功能。然而,这个例子在缓存方面并不是最好的。尝试每次找到'南丁格尔'一个字符..当从'晚上'(5个结果)到'nighti'(2个结果)时,它会发出一个呼叫:( 猜测我将不得不接受额外的呼叫:(:(: – Prasad 2010-04-28 12:28:29

+0

那么他们在那里做的只是简单的正则表达式匹配,所以你基本上只需要在发送一个新请求之前首先匹配你的缓存列表。对于你必须考虑的远程源,你可能不会得到整个列表,例如* In *,可能会受到限制到最大数量的项目,因此您必须发送下一封信的新活动。 – Daff 2010-04-28 12:44:43