Этот виджет может быть сделан из трех элементов: текстовый ввод, кнопочный ввод и неупорядоченный список для хранения результатов.
__________ _
|__________||v|__ <-- text and button
| | <-- ul (styled to appear relative to text input)
| |
| |
|______________|
ul отображается на:
- Событие 'keyUp' ввода текста (если значение не пустое)
- событие нажатия кнопки ввода (если в данный момент не отображается)
ul скрыто на:
- Событие «нажатия» кнопки ввода (если отображается в данный момент)
- Событие 'click' элементов списка
Когда отображается ul или инициируется событие keyUp текстового ввода, необходимо выполнить AJAX-вызов на сервер для обновления списка.
В случае успеха результаты должны быть размещены на ул. При создании элементов списка они должны иметь прикрепленное к ним событие click, которое устанавливает значение для ввода текста и скрывает ul (возможно, придется добавить ссылку в li, чтобы присоединить событие).
Самая сложная часть - это CSS. JavaScript прост, особенно с надежной библиотекой, подобной прототипу, которая поддерживает несколько браузеров.
Возможно, вы захотите поддерживать некоторые идентификаторы для элементов, поэтому вы можете добавить некоторые скрытые входы в каждый элемент списка с идентификатором и рядом с вводом текста для сохранения идентификатора выбранных элементов.