Получить выбранный объект из автозаполнения jQuery

#jquery #autocomplete #jquery-autocomplete

#jquery #автозаполнение #jquery-автозаполнение

Вопрос:

Я использую автозаполнение jQuery 1.8.

Есть ли какой-либо способ получить выбранный объект за пределами одного из обработчиков событий?

Я пытаюсь сделать что-то вроде…

  $("#searchUsers").autocomplete({
        source: 'Users/List',
  });

  $("#addUser").click(function() {
       // get the selected user Id
       var item = $("#searchUsers").autocomplete('selected');
       alert(item.Id);
  });
  

Я не вижу никакого способа сделать это, но это кажется довольно очевидным требованием.

Комментарии:

1. Не $("#searchUsers").val() даст того, что вы хотите?

2. Нет, я хочу объект, а не значение.

Ответ №1:

Я столкнулся с той же проблемой. Я мог бы получить доступ к выбранному элементу как к объекту.

 $("#searchUsers").data("autocomplete").selectedItem
  

Ответ №2:

Поведение по умолчанию заключается в том, что при выборе элемента значение помещается в текстовое поле. Таким образом, вы могли бы получить его, просто выполнив $("#searchUsers").val() .

Если вам нужна дополнительная информация из выбранного элемента, вам нужно передать обработчик select событий и внутри этого обработчика сохранить информацию в другом месте.

Комментарии:

1. Это то, что я делаю в данный момент, но это халтурно и немного глючно. Я надеялся, что будет более чистый способ сделать это.

Ответ №3:

добавьте select событие в свою функцию автозаполнения:

 search: function (event, ui) {
        $("#searchUsers").val('');
    },
select: function (event, ui) {
   foo = ui.item.label;
    $("#bar").val(ui.item.id);
   baz = (ui.item.JsonField);
}
  

посмотрите на вкладку События здесь

редактировать: добавлено search событие в функцию. Я использую search событие для очистки полей / переменных каждый раз, когда пользователь выполняет поиск

Комментарии:

1. В качестве вопроса я не хочу события.

2. почему бы и нет? поскольку это то, что вам нужно

3. Потому что мне нужно где-то сохранить переменную, а затем также прикрепить событие изменения, чтобы очистить переменную, поскольку select обновляется только при выборе подлинного значения. Я задал вопрос специально, потому что хочу избежать необходимости этого делать, и обычно jQuery достаточно хорошо продуман, чтобы предоставить вам некоторый механизм для обработки подобных вещей.

4. нет, потому что событие поиска срабатывает только после minLength delay выполнения условий и. Если вы хотите сделать это с помощью событий, которые вы должны использовать change , как описано в моем предыдущем комментарии. Ваше обновление точно показывает, как такой подход приводит к ошибкам, и почему библиотека действительно должна предоставлять простой механизм для этого.

Ответ №4:

Старый вопрос, но все же…

Просто определите переменную JavaScript и в событии выбора установите для объекта значение этой переменной. Например:

 $(function () {
    var object_selected= -1;
    $("#q").autocomplete({
            source: "path/to/jsondata",
            minLength: 3,
            select: function (event, ui) { //This is the event that you need to implement
                $('#q').val(ui.item.value);
                object_selected = ui.item; //This is what you will use later.
                return true;
            }
    });
});