#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;
}
});
});