0

enter code hereFacebookで検索候補を再現しようとしています。ヘッダー付きの異なる「タイプ」の結果が同じボックスに表示されること(人、グループ、ページなど)

基本的に、結果をタイプ別にグループ化し、タイプの名前 (例: ユーザー、グループ) を持つクリクラブルでないヘッダーを追加する必要があります。フェイスブックと同じように:

ここに画像の説明を入力

これは、jquery ui ページからのカスタム catcomplete です。

$.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 );
                                        });
                                }
                            });

-編集-

ここで、検索フィールドに「bootcamp」と入力してテストできます (ログインする必要はありません): http:// 209.51.221.243/integracion/login.php (タイプ「deya」は機能しますが、タイプ「bootcamp」は機能しません)

結果のタイプが 1 つだけの場合は正常に動作しますが、次の応答のように複数の場合は次のようになります。

[{"value":"Donde puedo descargar los drivers de bootcamp?","id":"1","category":"Ayudas"}][{"value":"Donde puedo descargar los drivers de bootcamp?","id":"1","category":"Ayudas"},{"first_name":"bootcamp","last_name":"bootcamp","id":"95","value":"bootcamp bootcamp","category":"Usuarios"}]

結果が表示されません、なぜですか?

4

2 に答える 2

0

http://jquery-ui.googlecode.com/svn-history/r3820/trunk/demos/autocomplete/categories.htmlをご覧ください。

$.extend($.ui.menu.prototype, {
    next: function() {
        this.move("next", ".ui-menu-item:first");
    },
    previous: function() {
        this.move("prev", ".ui-menu-item:last");
    },
    move: function(direction, edge) {
        if (!this.active) {
            this.activate(this.element.children(edge));
            return;
        }
        var next = this.active[direction + "All"]('.ui-menu-item').eq(0);
        if (next.length) {
            this.activate(next);
        } else {
            this.activate(this.element.children(edge));
        }
    }
});

$.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() {
    var data = [
        { label: "anders", category: "" },
        { label: "andreas", category: "" },
        { label: "antal", category: "" },
        { label: "annhhx10", category: "Products" },
        { label: "annk K12", category: "Products" },
        { label: "annttop C13", category: "Products" },
        { label: "anders andersson", category: "People" },
        { label: "andreas andersson", category: "People" },
        { label: "andreas johnson", category: "People" }
    ];
    $('#search').catcomplete({
        source: data
    });
});

少し前に非常によく似たものの jsFiddle の例を作成したことをほとんど忘れていました: jsFiddle の例

于 2012-06-04T01:40:24.627 に答える
0

あなたのphpでは、各タイプの最初の行にサブを追加するだけです。グローバル変数でそれを行うことができます:

$first = array();

while (...) {
   if (!$first[$row['type']]) {
       $first[$row['type']] = true;
       $row['sub'] = $row['type'];
   }
}

次に、JavaScriptで:

.data( "autocomplete" )._renderItem = function( ul, item ) {
            var sub = "";
            if (item.sub) {
                sub = $("<li class="sub">" + item.sub + "</li>");
                ul.append(li);
            }
            var li = $( "<li></li>" )
                .data( "item.autocomplete", item )
                .append( "<a><img src='"+item.img+"' /><span class='name'>" + item.value + "</span></a>" )
            ul.append(li);
                        };
于 2012-06-03T22:14:55.003 に答える