Есть ли в JavaScript событие «выбрать окно» или что-то подобное? (используя jQuery) - PullRequest
6 голосов
/ 12 марта 2012

У меня есть выбор 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» как исключение - есть и другие исключения, которые не приведут к раскрытию выбора.

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

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

1 Ответ

4 голосов
/ 12 марта 2012

Я не уверен, какие браузеры вы намереваетесь поддерживать, но прежде чем вы зайдете слишком далеко по этому пути, учтите, что если вы измените содержимое списка выбора (например, добавьте / измените / удалите параметры), то IE на самом деле проглотит событие (щелчок мышью или фокус), которое откроет список и оставит пользователя с закрытым списком выбора. Подробности смотрите здесь: http://webbugtrack.blogspot.com/2009/02/bug-487-onclickonfocus-bugs-on-select.html

Я думаю, что если вы действительно чувствуете, что задержка загрузки будет полезна ... Я бы скрыл / отключил список выбора при начальной загрузке и вызвал бы асинхронную загрузку опций после того, как он был обработан ... re -включение / показ выбора, когда он готов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...