Автозаполнение jQuery — как обрабатывать дополнительные данные?

Я борюсь со следующей проблемой. Я использую плагин автозаполнения jQuery, чтобы получить список предлагаемых значений с сервера. Список будет выглядеть так:

Username1|UserId1
Username2|UserId2

Итак, если я начну вводить «U», появится список "Username1" и "Username2", как и ожидалось. Я мог бы выбрать первый элемент, и значение <input> стало бы "Username1", но я на самом деле хочу отправить на сервер идентификатор пользователя.

Могу ли я как-то получить идентификатор, который следует за именем пользователя? Я намерен сделать сообщение формы об изменении текстового поля. Может быть, я слишком слеп, чтобы увидеть это в документах или найти в Google?


person Tomalak    schedule 16.12.2008    source источник


Ответы (3)


Для этого используйте метод result плагина autocomplete. Данные передаются в виде массива обратному вызову, и вам просто нужно где-то сохранить data[1]. Что-то вроде этого:

$("#my_field").autocomplete(...).result(function(event, data, formatted) {
    if (data) {
        $("#the_id").attr("value", data[1]);
    }
});
person davidavr    schedule 16.12.2008
comment
Красиво спасибо. Кроме чтения исходного кода плагина, как бы я узнал об этом? Документы не упоминают об этом, AFAICS. - person Tomalak; 17.12.2008
comment
@Tomalak: это в документах. Посмотрите здесь: docs.jquery.com/Plugins/Autocomplete и прокрутите вниз до Документация API, и вы посмотрю. - person davidavr; 17.12.2008
comment
Хорошо, тогда я должен быть слеп. Нашел. Я все еще думаю, что это не совсем очевидно, но, по крайней мере, я могу сказать, что это мой недостаток. ;-) Спасибо. - person Tomalak; 17.12.2008

Я собирался перечислить здесь несколько методов, но все, кроме одного, бесполезны. Выполните преобразование строки-> пользователя на сервере, как вы делали, чтобы создать список для автозаполнения.

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

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

person Oli    schedule 16.12.2008
comment
Это не станет общедоступным приложением, поэтому отсутствие поддержки JS не является проблемой. Хотя в целом вы были бы правы. На самом деле, я работал именно над тем, что вы предлагаете, но потом подумал, что это не может быть тем. Это просто кажется слишком уродливым. - person Tomalak; 16.12.2008
comment
Я не вижу, как это некрасиво. Альтернативы: добавление дополнительных полей формы и установка их на выбор автозаполнения; или сохранить выбранный идентификатор в JS и взломать его в конце данных сообщения. Выполнение поиска снова - действительно самый чистый способ... - person Oli; 17.12.2008

К вашему сведению, эта статья http://vivien-chevallier.com/Articles/use-bing-maps-rest-services-with-jquery-to-build-an-autocomplete-box-and-find-a-location-dynamicly есть хороший способ сделать это с помощью авторской функции displaySelectedItem, которая вызывается через событие выбора автозаполнения jQuery (полный код см. в статье).

Ваше здоровье

Мэтт

person Matty J    schedule 03.05.2012