Автозаполнение раскрывающегося списка с помощью кнопок ссылок - или "AJAX сумасшедший"
Итак, я хочу выпадающее меню автозаполнения с кнопками ссылок в качестве выбора. Итак, пользователь помещает курсор в "текстовое поле" и заваливается списком опций. Они могут либо начать печатать, чтобы сузить список, либо выбрать один из вариантов в списке. Как только они щелкают (или нажимают ввод), набор данных, с которым он связан, будет отфильтрован по выбору.
Хорошо, это так же просто, как обернуть автозаполнение AJAX вокруг выпадающего списка? Нет? (Пожалуйста?)
4 ответа
Этот виджет может быть сделан из трех элементов: текстовый ввод, кнопочный ввод и неупорядоченный список для хранения результатов.
__________ _
|__________||v|__ <-- text and button
| | <-- ul (styled to appear relative to text input)
| |
| |
|______________|
ul показывается на:
- 'keyUp' событие ввода текста (если значение не пустое)
- событие нажатия кнопки ввода (если в данный момент не отображается)
ul скрыто на:
- событие нажатия кнопки ввода (если отображается в данный момент)
- Событие 'click' элементов списка
Когда отображается ul или инициируется событие keyUp текстового ввода, необходимо выполнить AJAX-вызов на сервер, чтобы обновить список.
В случае успеха результаты должны быть размещены на ул. При создании элементов списка они должны иметь прикрепленное к ним событие "click", которое устанавливает значение для ввода текста и скрывает ul (возможно, придется добавить ссылку в li, чтобы присоединить событие).
Самая сложная часть - это CSS. JavaScript прост, особенно с надежной библиотекой, подобной прототипу, которая поддерживает несколько браузеров.
Возможно, вы захотите поддерживать некоторые идентификаторы для элементов, поэтому вы можете добавить некоторые скрытые входы для каждого элемента списка с идентификатором и рядом с текстовым вводом для сохранения идентификатора выбранных элементов.
Я не совсем уверен, что вы хотите, но у Ra-Ajax AutoCompleter определенно есть поддержка "контролей" внутри себя. Вы можете видеть это в окне поиска на самом деле Stacked (верхний правый угол), где мы используем ссылки. Но это также может быть LinkButtons, если вы хотите...
Отказ от ответственности; Я работаю с Ра-Аяксом...
Вам придется обработать событие OnSelectedIndexChanged вашего выпадающего списка, чтобы повторно привязать ваш набор данных на основе выбора пользователей. Если вы хотите, чтобы фильтрация происходила в асинхронной обратной передаче, оберните набор данных (или предполагаемую сетку данных) и ваш раскрывающийся список в UpdatePanel. Это один из способов сделать это в любом случае.
На мой взгляд, вы не должны использовать AJAX для этого вообще.
вот почему:
(1) В фокусе: ВСЕ варианты, которые он может выбрать, показаны в раскрывающемся списке. Это означает, что все возможные варианты уже отправлены клиенту.
(2) Если пользователь что-то вводит, количество записей в раскрывающемся списке фильтруется для соответствия. Это легко сделать на стороне клиента. Быть ajax'y и возвращаться к серверу на этом этапе просто замедлит процесс.
phpguru.org имеет элемент управления, который "почти точно" вам нужен:
http://www.phpguru.org/static/AutoComplete.html
Он немного отличается от того, что вам нужно, так как показывает раскрывающийся список при двойном щелчке, а не в фокусе. Это должно быть довольно легко изменить.
Надеюсь, это поможет.