Как клавиатура вниз или вверх между выпадающими "опциями"?
У меня есть пользовательский динамический выпадающий список, основанный на ajax.
У меня есть поле ввода [которое]; onkeyup
, запускает поиск Ajax, который возвращает результаты в div
и извлекается обратно с использованием innerHTML
. Все эти div
имеют основные моменты при onmouseover
поэтому типичный успешный поиск дает следующую структуру (простите за onmouseover
):
[input]
[div id=results] //this gets overwritten contantly by my AJAX function
[div id=result1 onmouseover=highlight onclick=input.value=result1]
[div id=result2 onmouseover=highlight onclick=input.value=result2]
[div id=result2 onmouseover=highlight onclick=input.value=result2]
[/div]
Оно работает.
Однако мне не хватает важных функций, стоящих за обычными элементами HTML. Я не могу использовать клавиатуру вниз или вверх между "опциями".
Я знаю, что JavaScript обрабатывает события клавиатуры, но; Я не смог найти хорошего гида. (Конечно, последующим вопросом будет: могу ли я использовать <ENTER>
для запуска этого события onclick
?)
Ответы
Ответ 1
Что вам нужно сделать, это подключить прослушиватели событий к div
с помощью id="results"
. Вы можете сделать это, добавив onkeyup
, onkeydown
и т.д. Атрибуты к div
при его создании или присоедините их с помощью JavaScript.
Моя рекомендация заключалась в том, что вы используете библиотеку AJAX, например YUI, jQuery, Prototype и т.д. по двум причинам:
- Похоже, вы пытаетесь создать Auto Complete, который должен предоставить большинство библиотек AJAX. Если вы можете использовать существующий компонент, вы сэкономите много времени.
- Даже если вы не хотите использовать элемент управления, предоставляемый библиотекой, все библиотеки предоставляют библиотеки событий, которые помогают скрыть различия между API-интерфейсами событий, предоставляемыми различными браузерами.
Забудьте addEvent, используйте утилиту Yahoo! s Event Utility, которая дает хорошее представление о том, что должна предоставить библиотека событий. Я уверен, что библиотеки событий, предоставляемые jQuery, Prototype и т.д. и др. обеспечивают аналогичные функции.
Если эта статья перейдет вам в голову, сначала просмотрите эту документацию, а затем перечитайте исходную статью (я нашел статью сделал гораздо больше смысла после того, как я использовал библиотеку событий).
Несколько других вещей:
- Использование JavaScript дает вам гораздо больше контроля, чем писать атрибуты
onkeyup
и т.д. в ваш HTML. Если вы хотите сделать что-то действительно просто, я бы использовал JavaScript.
- Если вы пишете свой собственный код для обработки событий клавиатуры, хорошая key code ссылка действительно удобна.
Ответ 2
Вплоть до головы я бы подумал, что вам нужно будет поддерживать некоторую форму структуры данных в JavaScript, которая отражает элементы в текущем раскрывающемся списке. Вам также понадобится ссылка на текущий активный/выбранный элемент.
При каждом запуске keyup
или keydown
обновите ссылку на активный/выбранный элемент в структуре данных. Чтобы обеспечить выделение информации в пользовательском интерфейсе, добавьте или удалите имя класса, созданное с помощью CSS, на основе того, является ли элемент активным/выбранным или нет.
Кроме того, это не большой, но innerHTML
не является стандартным (смотрите createTextNode()
, createElement()
и appendChild()
для стандартных способов создания данных). Вы также можете увидеть, как привязывать обработчики событий в JavaScript, а не делать это в атрибуте HTML.