jquery ui自动完成没有显示结果

时间:2011-09-26 08:32:23

标签: jquery jquery-ui jquery-ui-autocomplete

所以我使用jquery ui autocomplete而不是combobox来让我的用户更容易从数据库中选择数百种产品。

$(function() {
    $(".autocomplete").autocomplete({
        source: function(request, response) {
            $.ajax({ 
                'url': "http://localhost/project/index.php/product/search_data/",
                'data': { 'txt_product_name': $('#txt_product_name').val()},
                'dataType': "json",
                'type': "POST",
                'success': function(data){
                    response(data);
                }
            })
        }, 
        minLength: 2,
        focus: function( event, ui ) {
            $(".txt_product_id").val(ui.item.product_id);
            return false;
        },
        select: function( event, ui ) {
            $( ".txt_product_id" ).val(ui.item.product_id);
            $( ".txt_product_code" ).val(ui.item.product_code);
            $( ".txt_product_name" ).val(ui.item.product_name);

            return false;
        }       
    }).data("autocomplete" )._renderItem = function( ul, item ) {
        return $( "<li></li>" )
            .data( "item.autocomplete", item )
            .append( "<a>" + item.product_code + "<br>" + item.product_name + "</a>" )
            .appendTo(ul);
    };  
});

firebug告诉我,php成功生成了请求的数据,如下所示。

[
    {"product_id":"92","product_code":"TURE3052","product_name":"Choose Your Own Adventure"},
    {"product_id":"89","product_code":"UMPS3447","product_name":"Goosebumps"},
    {"product_id":"15","product_code":"ROSE7302","product_name":"The Name of the Rose"},
    {"product_id":"34","product_code":"LIFE1226","product_name":"The Purpose Driven Life"}
]

但不知何故,结果没有显示。

任何想法?

我从http://jqueryui.com/demos/autocomplete/#custom-data复制了部分代码。我已经测试了这个例子,但它确实有效。

1 个答案:

答案 0 :(得分:0)

好吧,我不太明白为什么和为什么,但碰巧我需要创建自动完成文本框的克隆。为此目的,我使用live()以便jquery捕获新克隆的事件。我修改上面的代码如下所示:

$(function() {
    $(".autocomplete").live('keyup.autocomplete', function() {
        $(".autocomplete").autocomplete({
            source: function(request, response) {
                $.ajax({ 
                    'url': "http://localhost/project/index.php/product/search_data/",
                    'data': { 'txt_product_name': $('#txt_product_name').val()},
                    'dataType': "json",
                    'type': "POST",
                    'success': function(data){
                        response(data);
                    }
                })
            }, 
            minLength: 2,
            focus: function( event, ui ) {
                $(".txt_product_id").val(ui.item.product_id);
                return false;
            },
            select: function( event, ui ) {
                $( ".txt_product_id" ).val(ui.item.product_id);
                $( ".txt_product_code" ).val(ui.item.product_code);
                $( ".txt_product_name" ).val(ui.item.product_name);

                return false;
            }       
        }).data("autocomplete" )._renderItem = function( ul, item ) {
            return $( "<li></li>" )
                .data( "item.autocomplete", item )
                .append( "<a>" + item.product_code + "<br>" + item.product_name + "</a>" )
                .appendTo(ul);
        };  
    })
});

正如我所说,我不明白为什么和为什么,但自动完成结果确实显示出来。感到有些松了一口气。但由于我必须了解自己的工作,我想我必须弄清楚解释。

想法?