2

私の現在のコードは jQuery 1.7.x を使用しています。jQuery 1.8 にアップグレードしたいのですが、オートコンプリート機能で問題が発生しています。同じコードで 2 つの jsfiddles を作成しました。ある例では正しく動作しますが、別の例では正しく動作しません。主な問題は、検索してクリックすると、警告ボックスが表示され、クリックされた内容が表示されるはずです。古い jQuery では機能しますが、1.8 では機能しません。

これが動作する1.7バージョンです - http://jsfiddle.net/u2GEe/1/

これが壊れた1.8バージョンです - http://jsfiddle.net/TPWXh/3/

コードは次のとおりです。

$.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 search-dropdown-category'>" + item.category + "</li>");
                currentCategory = item.category;
            }
            self._renderItem(ul, item);
        });
    }
});
$(document).ready(function() {
var data = [
    {
    label: "anders",
    category: "aa"},
{
    label: "andreas",
    category: "aa"},
{
    label: "antal",
    category: "aa"},
{
    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_input").catcomplete({
    source: data,
    select: function(event, ui) {
        alert(ui.item.label);
    }
});


});​

誰が契約が何であるか知っていますか?

4

2 に答える 2

5

これに数日費やした後、私はついにそれを理解しました。それは1行でした:

 self._renderItem(ul, item);

今、する必要があります

self._renderItemData(ul, item);

変更した後、すべてが正常に機能するようになりました。とてもイライラします。

于 2012-11-07T19:45:39.647 に答える
0

selectコールバックの値をログに記録するitemと、 undefined.

$("#search_input").catcomplete({
    source: data,
    select: function(event, ui) {
        console.log(event, ui); // DEBUG
        alert(ui.item.label);
    }
});

jQuery 1.8.2 と jQuery UI 1.9.1 が連携しない理由はわかりませんが、1.9.1 の代わりにjQuery UI 1.8.2を使用して動作するようになりました。

ここで試してみてください。

于 2012-11-07T19:43:59.740 に答える