2

HTML:

<input type="text" id="shop-id">

JS:

$(document).ready(function(){

    $( "#shop-id" ).autocomplete({
        source: "/ticket/get_sids",
        select: function(event, ui){
          //...
        }
    });               

});

有一个奇怪的自动完成问题。如果我用这样的静态变量声明源

    var data = ["0200","0032"];

    $( "#shop-id" ).autocomplete({
        source: "/ticket/get_sids"
    });

一切都如预期。

但是使用动态源网址,自动完成似乎不会过滤搜索。就像无论我输入什么作为搜索文本,自动完成都会打开整个源而不进行过滤。例如,我键入一个“g”,它会打开 0200、0032,但它不应该因为“g”与源中的任何内容都不匹配。

动态源返回纯 json,如:["0200","0032"]. 这是一个php页面:

return new Response(json_encode($data));

返回

["0200","0032"]

在浏览器窗口中。

环境:jQuery 1.7.2 jQuery-Ui 1.8.2

4

2 回答 2

1

您缺少将用于发回过滤器值的数据参数......如果这有任何意义。所以你需要在返回响应数据之前实现某种形式的服务器端过滤

“我输入一个“g”,它会打开 0200、0032,但它不应该是因为“g”与源中的任何内容都不匹配。”

$(document).ready(function(){

    $( "#shop-id" ).autocomplete({
        source: "/ticket/get_sids",
        select: function(event, ui){
          //...
        },
       data: { term: request.term   }  //"term" could be anything, based on parameters your server side method expects
        //...
     })
 });    

我之前回答过一个类似的问题。希望这可以帮助?https://stackoverflow.com/a/11930525/1105314

于 2012-09-17T11:15:32.567 回答
1

使用字符串时,自动完成插件期望该字符串指向将返回 JSON 数据的 URL 资源。它可以在同一台主机上,也可以在不同的主机上(必须提供 JSONP)。自动完成插件不会过滤结果,而是将请求参数“term”添加到 URL,服务器端脚本应该使用它来过滤结果

于 2012-09-17T11:35:06.483 回答