0

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: ""
                    }
                    }));

そして、先頭に「すべての会社」を配置する前に追加しようとしましたが、ボタンは他のリスト要素のようにまったく機能しません:

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

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

3

response() を呼び出すことができるのは 1 回だけです。結果のリストを 1 つ作成する必要があります。

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));
}
于 2012-07-12T07:15:02.690 に答える