Выбор HTML: устранение задержки браузера при нажатии клавиши для изменения? - PullRequest
3 голосов
/ 15 сентября 2011

Рассмотрим следующий HTML:

<select>
    <option>Aardvark</option>
    <option>Buffalo</option>
    <option>Camel</option>
    <option>X-ray Fish</option>
    <option>Yak</option>
    <option>Zebra</option>
</select>

В большинстве браузеров, когда элемент выбора имеет фокус, нажатие клавиши изменит выбранное значение на следующий параметр, который начинается с введенного символа.Например, нажатие клавиши «B» на клавиатуре, когда элемент <select> выше имеет фокус, меняет выбранное значение на «Buffalo».Нажатие «Z» после этого изменит значение на «Zebra».

Но я только что обнаружил, что, по крайней мере, в Firefox 6 и Safari 5 на моем ПК, есть задержка, прежде чем я могу нажимать навыберите следующее значение.В приведенном выше конкретном примере, если я нажму «B», а затем нажму «Z» менее чем через секунду, похоже, ничего не произойдет.

Однако в дальнейшем тестировании (с jQuery) я обнаружил, что события Javascript«keydown», «keyup» и «keypress» запускаются так, как вы ожидаете, независимо от того, насколько быстро вы нажимаете клавиши.Сами браузеры просто не переключают выбранную опцию, пока не пройдет определенный период времени.

Есть ли способ обойти это?

Ответы [ 2 ]

3 голосов
/ 15 сентября 2011

Кажется, это возможно при клонировании. Это очень грязный хак, но он отлично работает в Chrome: http://jsfiddle.net/pimvdb/v6qy8/2/.

$('select').keyup(function() {
    var newSelect = $(this).clone(true).val($(this).val());
    $(this).replaceWith(newSelect);
    newSelect.focus();
});
1 голос
/ 02 сентября 2017

Я сделал это, прервав keyevent и поместив preventDefault() вверху функции.Я использую клавишу Enter , чтобы прервать задержку и отправить то, что я уже набрал.

if (eventinfo.keyCode == 13) {
    eventinfo.preventDefault();
    var search = document.getElementById("searchtag");
    var value = search.value;
    mainPage.searchAdd(value).done(
        function () {
           search.value = "";
           search.focus();
        }
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...