автозаполнение ._renderItem и добавление класса в оболочку - PullRequest
8 голосов
/ 18 февраля 2012

Отойдя от примера здесь http://jqueryui.com/demos/autocomplete/#custom-data Мне интересно, как добавить стиль в оболочку ul при использовании _renderItem():

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

Ответы [ 3 ]

26 голосов
/ 18 февраля 2012

Вот один простой способ сделать это, нажав на событие open:

$("#auto").autocomplete({
    source: /* ... */,
    open: function () {
        $(this).data("autocomplete").menu.element.addClass("my_class");
    }
});

jQueryUI> = 1,9

$("#auto").autocomplete({
    source: /* ... */,
    open: function () {
        $(this).data("uiAutocomplete").menu.element.addClass("my_class");
    }
});

menu - это внутренний виджет, который используется автозаполнением.

Пример: http://jsfiddle.net/bx8Ye/

3 голосов
/ 18 февраля 2012

Если вы хотите добавить стиль в оболочку ul, вам нужно перегрузить _renderMenu (), а не _renderItem ().

Вот пример, который устанавливает ширину UL и добавляет нижний колонтитул какпоследний ли в уль

.data( "autocomplete" )._renderMenu = function( ul, data ) {

    var self = this;
    $(ul).css('width', settings.dropDownWidth);

    $.each( data, function( index, item ) {
        self._renderItem( ul, item );
    });

    $(ul).append("<div class='myFooter'>some footer text</div>");
}; 
1 голос
/ 15 мая 2013

При использовании jQuery UI 1.10 я использовал ответ Эндрю Уитакера, но мне пришлось изменить

$(this).data("autocomplete").menu.element.addClass("my_class");

на

$(this).data("uiAutocomplete").menu.element.addClass("my_class");
...