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

我使用jQuery UI的自动完成function。

$("#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的元素。 但不幸的是,所有这些。 根据我在现场输入的内容,它们不是filter。

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

编辑:感谢TJ 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; } }); 

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

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

(如果他们真的提到在那里进行过滤会很好;我已经记录了一个问题,表明他们会这样做。 更新:他们花了不到三个小时来更新文档并关闭问题;新文档将在某个时候被推送,至少v1.9。很好!)

自动完成程序允许您以三种方式提供源:

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

  • 服务器端调用:在这种情况下,它传递一个term参数,您应该使用它来过滤。

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