jQuery 自动完成无法正常工作

jQuery autocomplete not properly working

当我输入第一个字符时自动完成打开,但当我输入另一个或两个字符时它不会过滤,保持不变。

即使在第一个字符上,对于任何类型的内容,列表打开都是相同的,顺序(没有过滤器)来自网络服务。

这是我的代码:

$(function() {
  $('#to').autocomplete({
    source: 'json/searchobjects.php',
          minLength: 1,
          select: function(event, ui) {
              globalDest = ui.item.latlng;
          }
  });
});

这是 JSON 对象:

[
{
label: "label-1",
value: "val-1"
},
{
label: "label-2",
value: "val-2"
} 
]

看来我少了什么。

感谢您的帮助

我以前也遇到过这个问题。在提供结果的 PHP 脚本中,您需要根据 jQuery 自动完成脚本传递给它的值进行过滤。使用 $_GET['term'] 这个过滤器,因为这是自动完成的用途。

jQuery 自动完成插件正在以 "term" 作为变量向您的脚本静默发送 GET 请求,据我所知,您无法配置此设置。

请注意,您可能希望将所需字符数增加到一个以上,因为您将返回大量用户不关心的结果。我发现三个字符通常是速度和实用性之间的一个很好的平衡。

根据您的编辑,您的 json 必须是 ["el1","el2",...,"el3"] 类型,或者如果您需要保留 [{},{},...] 类型。但如果您需要使用您的对象列表,请按如下方式使用

      source: function (request, response) {
            jQuery.getJSON(u, {
                term: request.term*,
                json: 'yep'*/
            }).done(function (_result2) {

                //alert(_result2[0].Label)
                response($.map(_result2, function (item) {
                    return {
                        label: item.Label,
                        value: item.Value,
                        id: item.Value
                    }
                }));
            }).fail(function () {
                alert('fail');
            })
                .error(function () {
                    alert('error');
                });
        }

在您的 'json/searchobjects.php?term=TERM' 中将 term 作为请求参数以使用 select * from table where Label='%$_GET["term"]' 或其他方式在服务器端进行过滤