Jquery自动完成 - 程序化和硬编码响应

时间:2012-07-12 07:01:19

标签: jquery autocomplete jquery-autocomplete

我正在修改一些jquery自动完成代码。当前代码工作正常,响应列表以编程方式生成,但我想在响应列表的顶部添加一个硬编码的“所有公司”,其行为与响应列表中的其他条目类似。这是我正在使用的代码:

    $(function() {
    $( "#report_generator_search" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                url: "lib/test.php",
                dataType: "json",
                type: "POST",
                data: {
                    action: "search_test",
                    featureClass: "P",
                    style: "full",
                    maxRows: 24,
                    searchTerm: request.term
                },
                success: function( f ) {
                    response( $.map( f, function( item ) {
                        return {
                            label: item.company_name + ' ('+item.company_id+') ' + item.generator_address,
                            value: item.company_name,
                            company_id: item.company_id
                        }
                    }));        
                }
            });
        },
        minLength: 1,
    });

我试过简单地添加另一个回复,但没有去:

    response( $.map( f, function( item ) {
                        return {
                        label: "All Companies",
                        value: "All Companies",
                        company_id: ""
                    }
                    }));

我尝试过prepending,它将“All Companies”放在顶部,但按钮根本不像其他列表元素那样起作用:

    $('.ui-autocomplete').prepend('<li class="ui-menu-item" role="menuitem"><a class="ui-corner-all" tabindex="-1">All Companies</a></li>');

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:3)

您只能拨打一次响应()。您需要创建一个结果列表:

success: function( f ) {
    // Begin with your hard-coded choices
    var staticChoices = [
        {
            label: "All Companies",
            value: "All Companies",
            company_id: ""
        }
    ];

    // Parse downloaded choices
    var dynamicChoices = $.map( f, function( item ) {
        return {
            label: item.company_name + ' ('+item.company_id+') ' + item.generator_address,
            value: item.company_name,
            company_id: item.company_id
        }
    });

    // Combine the two :)
    response(staticChoices.concat(dynamicChoices));
}