jQuery自动完成json源 - 不自动完成,但只显示完整列表

时间:2012-02-19 13:01:40

标签: javascript jquery json user-interface autocomplete

我使用jQuery UI的自动完成功能。

$("#search").autocomplete({
minLength: 0,
source: 'source.php',
select: function( event, ui ) {
    $("#search").val(ui.item.label);
    return false;
},
focus: function(event, ui) {
    $("#search").val(ui.item.label);
    return false;
}

});

我在source.php中插入多个元素并将它们返回json编码。

$search[] = array(
   'value' => $id,
   'label' => $name
);
echo json_encode($search);

当我开始在自动填充字段中输入时,会显示一个列表,其中包含source.php的元素。但不幸的是,所有这些。根据我在现场输入的内容,它们不是过滤器。

当我使用json时,是否有任何特殊选项需要设置?

编辑:感谢T.J. Crowder我提出了这个解决方案,让jQuery完成这项工作; )

$.getJSON('source.php', function(search) {
    $("#search").autocomplete({
    minLength: 0,
    source: search,
    select: function( event, ui ) {
       $("#search").val(ui.item.label);
       return false;
    },
    focus: function(event, ui) {
        $("#search").val(ui.item.label);
        return false;
    }
});

1 个答案:

答案 0 :(得分:2)

从文档中可以看出这一点并不明显,但是当您提供source任何涉及运行代码(服务器端或客户端端)的内容时,jQuery UI自动完成程序需要过滤结果。对于服务器端代码,您可以使用它传递给PHP文件的term参数。来自the docs

  

使用String时,Autocomplete插件希望该字符串指向将返回JSON数据的URL资源。它可以位于同一主机上,也可以位于不同的主机上(必须提供JSONP)。请求参数“term”将添加到该URL。数据本身的格式与上述本地数据的格式相同。

(如果他们真的提到在那里过滤会很好;我logged an issue建议他们这样做。更新:他们花了不到三个小时来更新文档并关闭问题;新文档将在某个时候被推动,至少是v1.9。很好!)

自动填充器允许您以三种方式提供信号源:

  • 静态源数组:在这种情况下,自动完成器会进行过滤。

  • 服务器端调用:在这种情况下,它会传递term参数,您可以使用它进行过滤。

  • 客户端调用:在这种情况下,它将request对象传递给具有term属性的客户端代码;你应该用它来过滤。