我使用Jquery自动完成功能来显示客户列表。显示初始列表但不会根据我的输入过滤。这是代码 HTML:
<input type="text" name="cust_display" id="cust_display" value="" />
使用Javascript:
$(function() {
$( "#cust_display" ).autocomplete({
source: "includes_ajax/inc.help.php",
minLength: 2,
dataType: "json",
select: function( event, ui ) {
alert( ui.item ?
"Selected: " + ui.item.value + " aka " + ui.item.id :
"Nothing selected, input was " + this.value );
}
});
});
数据采用json格式,并且显示初始列表(我可以向下滚动并选择),我知道它没问题。这里需要一些帮助。我错过了什么?
以下是json响应示例
[{"value":"ELIAS VERGARA","id":"68"},{"value":"Geoff Smith","id":"69"},{"value":"Gilbert","id":"73"},{"value":"Jeremy Kinder","id":"57"},{"value":"Kim, 46307","id":"70"},{"value":"michael Shoulson","id":"71"},{"value":"michael Stettbacher","id":"60"},{"value":"Renata Ince, 21076","id":"58"}]
答案 0 :(得分:1)
这是正常的,请检查此http://api.jqueryui.com/autocomplete/
String:使用字符串时,Autocomplete插件需要这样做 string指向将返回JSON数据的URL资源。它可以 在同一主机上或在另一主机上(必须提供JSONP)。的的 自动填充插件不会过滤结果,而是查询 string添加了一个术语字段,服务器端脚本应该这样 用于过滤结果。 例如,如果源选项是 设置为&#34; http://example.com&#34;并且用户键入foo,一个GET请求 将被http://example.com?term=foo。数据本身可以 格式与上述本地数据相同。
当你向他提供带有json数据的url时,Jquery不会过滤数组。 相反,你必须在inc.help.php的php代码中过滤它,例如:
// Suppose we already have the array
$array = array(array("value"=>"ELIAS VERGARA","id"=>"68"),array("value":"GeoffSmith","id"=>"69")); // ... i will not put all the values
if( isset($_GET['cust_display']) )
$filter_word = $_GET['cust_display'];
else
$filter_word = false;
if( $filter_word)
{
for($i = 0; $i < count($array); $i++)
{
if( !stristr($array[$i], $filter_word) )
unset( $array[$i] );
}
}
// Then print $array as json format
但是您有另一种选择:执行ajax请求,将来自inc.help.php的json数据添加到数组中,然后您可以将其设置为自动完成的源,并且它会自动运行。但是除非你创建一个更新数组的函数,每隔x秒调用一次,或者每当用户在输入中键入内容时,数组自然不会被更新。