4

我想要做的是通过 jQueryUI 的功能使用自动完成对结果进行分类。经过一番谷歌搜索后,我发现它有一个内置函数(http://jqueryui.com/demos/autocomplete/#categories),但该示例仅适用于本地数据源(javascript 中的数组)。我正在处理一个远程数据源。它的自动完成功能在没有添加类别代码的情况下工作正常,但在添加时会中断。

这意味着php代码没问题(返回json数据的搜索页面)。

我从 jQueryUI 站点获取了这段代码:

$.widget( "custom.catcomplete", $.ui.autocomplete, {
                _renderMenu: function( ul, items ) {
                    var self = this,
                    currentCategory = "";
                $.each( items, function( index, item ) {
                if ( item.category != currentCategory ) {
                    ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
                    currentCategory = item.category;
            }
            self._renderItem( ul, item );
        });

然后我将它与它的搜索端结合起来(更改为类别):

$(function() {
        $( "#search" ).catcomplete({
            delay:0,
            source: "query/encode-json.php?term="+ $("#search").val(),
            select: function(event, ui){
                alert(ui.item.label);
            }
        });     
    });

但它不起作用:(我搜索了很多,但其他人都在它的 json 方面遇到问题。这是我的 json 数据:

[{"value":"some dude","id":"1","category":"artist"},{"value":"some other dude","id":"2","category":"artist"}]
4

3 回答 3

2

我很确定您的问题是source您传递给自动完成的选项对象的属性:

$("#search").catcomplete({
    delay:0,
    source: "query/encode-json.php?term="+ $("#search").val(),
    select: function(event, ui){
        alert(ui.item.label);
    }
});    

source将在您实例化小部件时评估一次。换句话说,$("#search").val()不会在每次用户键入时执行。

由于默认情况下自动完成term在查询字符串中发送,你应该能够做到:

$("#search").catcomplete({
    delay:0,
    source: "query/encode-json.php",
    select: function(event, ui){
        alert(ui.item.label);
    }
}); 

我很确定其他一切都是正确的,因为使用您的数组作为具有类别的本地数据源可以正常工作:http: //jsfiddle.net/jadPP/

于 2012-07-30T01:50:18.743 回答
0

用这个:

http://www.jensbits.com/2010/03/29/jquery-ui-autocomplete-widget-with-php-and-mysql/

(更新)

希望这可以帮助 :-)

于 2012-07-29T05:52:37.993 回答
0

默认_renderItem()方法查找item.label,但您的 json 数据包含item.value. 您需要将您的 encode-json.php 脚本更改为使用label而不是value,否则您必须使用source:您提供自己的回调函数的版本。

于 2012-07-29T06:10:22.543 回答