Заполнить раскрывающийся список HTML onclick
у меня есть страница, которая содержит несколько HTML -select
выпадающие списки, и требуется население onclick
элемента. Это заполнение выполняется с помощью вызова AJAX в прослушивателе событий click select
элементы.
причина этого в том, что производительность и загрузка очень важны, и поэтому они не могут быть заполнены при загрузке страницы.
кроме того, конструкция должны используйте родной HTML select
элемент.
я создал демонстрацию jsFiddle, чтобы показать проблему. При нажатии на кнопку select
элементы заполняются, а ширина select
увеличивается в результате.
select
отображает только начальную опцию (до заполнения AJAX).
------ Просмотр Демо ------
демо использует setTimeout()
50 миллисекунд для эмуляции ответа AJAX время.
как я могу заставить это заполнить onclick
и правильно отобразить?
есть ли способ открытия select
при обратном вызове ответа popualation?
EDIT: кроме того, есть ли раскрывающийся список плагинов jQuery, который использует родную тему браузера для стиля?
что я пробовал до сих пор
- заполнить
select
при наведении, однако быстрый пользователь может открытьselect
перед загрузкой параметров. Кроме того, если пользователь прокрутите страницу вниз, и за каждыеselect
, это вызовет много ненужных вызовов AJAX. - изменение прослушивателя событий на
focus
вместоclick
(as @AndyPerlitch предложил). Однако это не сработает, если запрос AJAX займет всего 50 миллисекунд для ответа. (Посмотреть Демо) - изменение прослушивателя событий на
mousedown
имеет тот же эффект, что иfocus
обновление: это не проблема в FireFox. select
открывается, затем загружает новые элементы и отображает их, все в открытом состоянии.
4 ответов
лично я бы выбрал другой подход полностью, но это зависит от ваших потребностей. Здесь я предполагаю, что выпадающий список "почти определенно" будет нажат (и, следовательно, загружен) в какой-то момент пользователем.
имея это в виду, я бы соблазнился заполнить select
списки с использованием ajax, как только страница загружена. Это имеет преимущество в том, что вы можете быстро загрузить страницу (так как по-прежнему нет сбора списка "загрузка страницы"), но это также означает, что ajax, скорее всего завершите, прежде чем пользователь поймет, что им нужно использовать список выбора. Я бы даже пошел на дополнительный шаг и имел временные значки загрузки вместо выбранных, пока ajax работает, это магия (или отключить их!) в случае, если ajax имеет медленный день, и пользователь быстро, как Супермен.
конечно, все это зависит от того, как "установить в камень" ваше требование-сделать загрузку ajax при взаимодействии пользователя с раскрывающимся элементом
или, может быть,этот может оказаться полезным?
выбор всегда будет отображаться так, как это было до начала события click. Поэтому вы увидите только начальный вариант, потому что вы делаете AJAX-заполнение после запуска события click.
Это может быть компромиссом для вас, но попробуйте AJAX-заполнить перед событием click. Это может быть: - при наведении, как вы уже сделали (пользователь должен прокручивать для щелчка в любом случае) - дополнительный щелчок для ваших пользователей на элементе, соседствующем с select
скрыть выпадающий список и есть что-то другое на его месте для пользователя, чтобы нажать на курок загрузки и отображения.