Задать вопрос
qmax
@qmax
программер

Как динамически добавлять options к select после того как он уже открыт?

Цель: каждый раз при открытии select-меню запрашивать где-нибудь список опций и генерить меню на лету.

Попытка решения: повешать на onfocus обработчик, который генерит и добавляет новые options.
По ссылке embed.plnkr.co/B0303y/preview вариант реализации на jquery и несколько на angular.

В firefox всё работает чудесно.
А в хроме выпадающее меню не перерисовывается, в лучшем случае вместо этого добавляется скролбар.
В других браузерах не пробовал.

Но чисто по человечески, я вполне понимаю хром. Выпадающий список рисуется уже в ui браузера, которое какбы не обязано динамически следить за происходящим на странице.
И не уверен, что в очередной версии файрфокса всё останется чикипуки.

Вопрос: как ещё можно провернуть такой фокус, чтобы не сильно пугать этим браузер?
  • Вопрос задан
  • 1206 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Использовать свой нестандартный список
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Оборачиваете select в доп. элемент, в котором в самом конце добавляете невидимый div на высоту select, чтобы он был поверх select и не пропускал к нему click. При клике на этот див запускаете запрос, обновляя ui классом типа loading, на который с помощью css вешаете анимацию загрузки. После получения данных публикуете их в скоуп и инициируете фэйковое событие "клик" на элементе селекта.
Если нужен пример директивы - напишите в комментарии.
Ответ написан
@Mycolaos
Можете использовать React.js

Вот еще VanillaJS, прекрасно работает в Хроме:
<select onclick='loadOptions(event)'></select>

<script>
function loadOptions(e) {
  setInterval(function () {
    var o = document.createElement('option');
    o.innerHTML = 'hello';
    e.target.appendChild(o);
  }, 500);
}
</script>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы