У меня есть html-выбор:
Используя jQuery, есть ли событие, которое я могу зафиксировать, когда раскрывается список опций выбора? (причина, по которой мне это нужно, заключается в том, что я хочу отложить заполнение списка до того момента, когда список нужно будет отобразить пользователю ).
mousedown
работает, когда они нажимают на него, но ничего не делает, если они переходят к нему и нажимают ввод.
focus
также работает для щелчка и почти работает для перехода к нему, но он сразу срабатывает при переходе к нему, а не ждет, пока они не нажмут ввод, чтобы открыть список параметров. (Это проблема, потому что, если они перейдут к нему, а затем перейдут без нажатия клавиши ввода, я не хочу, чтобы событие запускалось ).
Я даже придумал эту мерзость:
var select_reveal = function(ev) {... }
$('select').on('mousedown', select_reveal).on('keydown', function(ev) {
// character code 9 is tab
if (ev.which !== 9) select_reveal.bind(this)(ev);
});
Вот это вообще вроде работает . Это работает даже в том случае, когда они вводят букву алфавита (, она заполняет список, а затем переходит к первому варианту, начинающемуся с этой буквы ). Но, как я уже сказал, это какая-то мерзость. Это также немного хакерски просто проверять «вкладку» как исключение --, определенно есть другие исключения, которые не приведут к раскрытию выбора.
Существует ли простое событие, которое охватывает этот вариант использования (или, по крайней мере, что-то менее отвратительное, которое охватывает его )?
(Примечание. :Я знаю, что существуют альтернативы такой структуризации системы, как эта --, например, путем заполнения параметров заранее по мере их изменения, а не при раскрытии выбора; но я не ищу альтернативных предложений, просто интересно, есть ли решение явно поставленной проблемы ).