Получить .val () при keydown * not * keyup - PullRequest
3 голосов
/ 29 сентября 2011

Я пишу библиотеку, которая добавляет виджет в текстовую область, поэтому мне нужно определить, когда пользователь начинает что-то печатать:

this.$input.bind('keydown keyup', function() {
    if (this.$input.val() == …) { … }
}

.val() обновляется только тогда, когда keyupсрабатывает.Это слишком большая задержка.Я хочу знать состояние поля ввода на keydown.Знаете ли вы о библиотеке, которая улучшает .val()?

Ответы [ 4 ]

5 голосов
/ 29 сентября 2011

слишком поздно?Я не могу представить сценарий, в котором 10 мс будут иметь такое большое значение, но вы всегда можете изучить аргументы событий и получить оттуда символ.или попробуйте нажатие клавиши .

edit: есть также событие ввода , которое срабатывает, как только изменяется вход (до нажатия, но послезначение меняется);

3 голосов
/ 02 октября 2011

Нашел, казалось бы, идеальное решение .Использует вышеупомянутый HTML5 oninput с onpropertychange отступлениями для IE.Brilliant.Фантастика.Другие счастливые слова.

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

Единственный способ определить символ в keydown / keypress - использовать свойство event.keyCode или event.which (где event - это объект, переданный в качестве первого аргумента функции прослушивателя событий).

Поменяйте местами ваши события на событие keypress.Слушатель этого события срабатывает, пока нажата клавиша.keydown и keyup запускаются только один раз.Во время события keydown / keyup возможно добавление нескольких символов.

1 голос
/ 29 сентября 2011

Для нажатия клавиши (например, клавиши "a") событие keydown запускается до того, как к текстовому вводу добавляется "a".Вы можете определить тип события и определить, является ли свойство события .keyCode (или .which) ключом в области печати, и попытаться предсказать, что .val() может вернуть после события keyup, но это плохая идея .

this.$input.bind('keydown keyup', function(e) {
    var val = this.$input.val();

    if (e.type == 'keydown') {
        // Here is where you would check to see if e.keyCode was a printable
        // character.  Note that key codes differ from ASCII codes. For
        // example, the "a" key will return key code 65, which is actually
        // the ASCII code for "A", so you would need to check for the presence
        // of shift keys and such.  Again, this is a bad idea :)
        val += String.fromCharCode(e.keyCode);
    }

    if (val == …) { … }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...