我使用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;
}
});
答案 0 :(得分:2)
从文档中可以看出这一点并不明显,但是当您提供source
任何涉及运行代码(服务器端或客户端端)的内容时,jQuery UI自动完成程序需要你过滤结果。对于服务器端代码,您可以使用它传递给PHP文件的term
参数。来自the docs:
使用String时,Autocomplete插件希望该字符串指向将返回JSON数据的URL资源。它可以位于同一主机上,也可以位于不同的主机上(必须提供JSONP)。请求参数“term”将添加到该URL。数据本身的格式与上述本地数据的格式相同。
(如果他们真的提到在那里过滤会很好;我logged an issue建议他们这样做。更新:他们花了不到三个小时来更新文档并关闭问题;新文档将在某个时候被推动,至少是v1.9。很好!)
自动填充器允许您以三种方式提供信号源:
静态源数组:在这种情况下,自动完成器会进行过滤。
服务器端调用:在这种情况下,它会传递term
参数,您可以使用它进行过滤。
客户端调用:在这种情况下,它将request
对象传递给具有term
属性的客户端代码;你应该用它来过滤。