У меня есть выбор HTML:
<select>
<option>Choose one</option>
</select>
Используя 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);
});
Это на самом деле , кажется, работает . Это даже работает для случая, когда они набирают букву алфавита (он заполняет список, а затем переходит к первому варианту, начинающемуся с этой буквы). Но, как я уже сказал, это какая-то мерзость. Также немного глупо просто проверять «tab» как исключение - есть и другие исключения, которые не приведут к раскрытию выбора.
Есть ли простое событие, которое охватывает этот вариант использования (или, по крайней мере, что-то менее отвратительное, которое покрывает его)?
(Примечание: я знаю, что есть альтернативы структурированию системы, подобной этой, например, путем предварительного заполнения параметров по мере их изменения, а не в выбранном раскрытии; но я не ищу альтернативы предложения, просто интересно, есть ли решение проблемы, поставленной в явном виде).