Jquery自动填充与键入不匹配

时间:2014-12-21 08:37:41

标签: jquery autocomplete

我使用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"}]

1 个答案:

答案 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秒调用一次,或者每当用户在输入中键入内容时,数组自然不会被更新。