【问题标题】:jQuery Autocomplete order of resultsjQuery自动完成结果的顺序
【发布时间】:2012-06-08 12:33:01
【问题描述】:

我正在使用jQuery-autocomplete plugin 来获取有关使用对服务器的 AJAX 调用来完成输入字符串的建议。此外,服务器会按照我希望它们出现的顺序返回结果,但自动完成以不同的顺序显示它们。

如何配置 jQuery 自动完成功能以不重新排序输出?我不需要在客户端进行任何类型的处理,因为数据已经按要求进行了排名/排序。

【问题讨论】:

  • “自动完成以不同的顺序显示它们”是什么意思?
  • 我的意思是下拉列表中显示的字符串顺序与服务器返回的顺序不同,(这是一个由“\n”分隔的字符序列的字符串,如文档中所示)。

标签: jquery jquery-autocomplete


【解决方案1】:

只需在将服务器结果发送到自动完成之前对其进行排序即可。

所以在你 echo json_encode($return_arr); 之前,请在 $return_arr 上使用 @987654321@ 函数

你也可以试试这样:

逻辑是建立一个以术语开头的匹配数​​组,然后将其与包含该术语但不以该术语开头的匹配连接。

$(document).ready(function () {
    var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim'];
    $("input").autocomplete({
        source: function (request, response) {
            var term = $.ui.autocomplete.escapeRegex(request.term)
                , startsWithMatcher = new RegExp("^" + term, "i")
                , startsWith = $.grep(source, function(value) {
                    return startsWithMatcher.test(value.label || value.value || value);
                })
                , containsMatcher = new RegExp(term, "i")
                , contains = $.grep(source, function (value) {
                    return $.inArray(value, startsWith) < 0 &&
                        containsMatcher.test(value.label || value.value || value);
                });

            response(startsWith.concat(contains));
        }
    });
});

示例: http://jsfiddle.net/zkVrs/

来源: https://stackoverflow.com/a/8302996/973155

【讨论】:

  • the server takes care of returning the results in the order I would want them to appear but autocomplete shows them in a different order. 听起来 OP 已经在这样做了。
  • stackoverflow.com/a/8302996/277923 我从上面的链接中读到了这个,但我无法理解如何使用它来进行“不排序”。我希望 jQuery-autocomplete 以 ajax 调用返回的顺序显示结果。
  • 我已经在下一个答案stackoverflow.com/a/10950584/277923分享了相关代码
  • Farhan,如果上面的代码不是你写的,分享它的源码是有礼节的。 Andrew Whitaker 去年在上面提到的链接 rajatkhanduja 中发布了这个。
  • 这太完美了!在自动完成大型集合时,在按字母排序之前对以术语开头的项目进行排序是一个巨大的可用性改进。谢谢!
【解决方案2】:

嗯,结果比我想象的要简单。我决定阅读插件的代码并通过注释掉对我的输出进行排序的代码来修改它。

那时我在默认值中发现了一个变量“sortResults:true”。所以,我只需要将该变量设置为 false。不过我没有在文档中找到这个。

$('#search').autocomplete ( { url: "index.php", sortResults: false } )

现在输出的顺序完全符合我的要求。

我有了阅读代码以从这里查找/解决问题的想法:jQuery "Autocomplete" plugin is messing up the order of my data (那不是同一个插件)

谢谢。 :)

【讨论】:

  • 48 小时后肯定会这样做。
  • 这更像是,从服务器显示预处理结果比在客户端显示要容易得多。 +1
  • 您确定您使用的是jQuery UI AutoComplete widget 吗?我浏览了 GitHub 源代码和 API 文档,并且 1. url 参数不存在 2. sortResults 永远不会出现在源代码中的任何位置(1.8 版本)...
  • sortResults 不作为选项存在,这似乎不起作用。想法?
【解决方案3】:

由于在当前版本的 jQuery Autocomplete 插件中没有 sortResults 选项,我不得不搜索另一个解决方案来解决这个问题,并发现插件对结果进行排序的唯一原因是服务器响应每次不是纯数组时都会被标准化对象{标签:...,值:...}。

考虑到 PHP 作为您使用的语言,json_encode(array_values($your_array)); 应该可以解决问题。

【讨论】:

  • 谢谢@sKopheK!澄清一下,将这个提供给源函数的响应参数:[ {label: "suggestion", value: "suggestion"}, ]——不是这个:["suggestion",]
猜你喜欢
  • 2015-10-27
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2011-07-21
  • 2010-10-06
  • 1970-01-01
相关资源
最近更新 更多