Есть ли в JavaScript событие «открыть окно выбора» или что-то подобное? (с использованием jQuery)

У меня есть 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);
});

Вот это вообще вроде работает . Это работает даже в том случае, когда они вводят букву алфавита (, она заполняет список, а затем переходит к первому варианту, начинающемуся с этой буквы ). Но, как я уже сказал, это какая-то мерзость. Это также немного хакерски просто проверять «вкладку» как исключение --, определенно есть другие исключения, которые не приведут к раскрытию выбора.

Существует ли простое событие, которое охватывает этот вариант использования (или, по крайней мере, что-то менее отвратительное, которое охватывает его )?

(Примечание. :Я знаю, что существуют альтернативы такой структуризации системы, как эта --, например, путем заполнения параметров заранее по мере их изменения, а не при раскрытии выбора; но я не ищу альтернативных предложений, просто интересно, есть ли решение явно поставленной проблемы ).

6
задан Ben Lee 12 March 2012 в 18:11
поделиться