Подтвердить что ты не робот

JQuery UI автозаполнение виджета - как получить ссылку на меню?

Я хочу получить ссылку на объект меню, который создает автозаполнение (поэтому я могу получить .attr("id"), например), но я не очень хорошо знаком с jQuery/javascript. В источнике я нашел это:

https://github.com/jquery/jquery-ui/blob/1-9-stable/ui/jquery.ui.autocomplete.js#L182

поэтому есть объект, летающий вокруг, я просто не могу найти, как его схватить.

Итак, например, если у меня есть вход с автозаполнением, связанным с ним следующим образом:

// input = reference to the input text box on the form
input.autocomplete({
  select: function(event, ui) {
    // how to get the reference here?

    // some things I've tried
    // return input.menu
    // return input.data("menu")
    // and a few others but they didn't work either
  }
});

Я попытался взглянуть на сам объект данных, но было так много вариантов, что я мог потратить весь день на это, но до сих пор не нахожу то, что ищу. Любая помощь или понимание очень ценятся.

4b9b3361

Ответ 1

Вы можете получить ссылку на виджете, посмотрев на набор данных, назначенный его корневому элементу (ввод). Тогда выбор свойства меню (и его элемента) является довольно тривиальным. )

  select: function(event, ui) {
    // that how get the menu reference:
    var widget = $(this).data('ui-autocomplete'),
        menu   = widget.menu,
        $ul    = menu.element,
        id     = $ul.attr('id'); // or $ul[0].id
  }

... как this внутри select функция ссылается на <input>, когда эта функция называется обработчиком событий.

Ответ 2

Простейший способ сделать это: $(this).autocomplete('widget');
Он делает то же самое, что:

select: function(event, ui) {
// that how get the menu reference:
var widget = $(this).data('ui-autocomplete'),
    menu   = widget.menu,
    $ul    = menu.element,
    id     = $ul.attr('id'); // or $ul[0].id

}

Он дает список ul

$(this).autocomplete('widget').attr('id');