Проблемы с получением правильного значения ввода при keydown / keyup

0

Я работаю над запуском событий по определенным комбинациям клавиш, которые проверяют значение ввода, в который они были введены.

Проблема, с которой я сталкиваюсь, заключается в том, что можно запускать keypress или keydown и вводить символ без запуска keyup.

Изображение 174551

И наоборот только keyup событие может считывать значение ввода с вновь введенным характером, поскольку как keydown и keypress огня перед символом добавляются на вход.

Демо-версия JSFiddle

(Примечание: нажмите сдвиг и любой другой символ. Если вы удерживаете shift, а затем нажмите и отпустите другой символ, произойдет событие keyup, но если вы нажмете и отпустите shift одновременно с другим ключом, событие keyup не будет срабатывать. )

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

К сожалению, я также не могу просто предположить, что, поскольку они нажимали эту комбинацию клавиш, что поле ввода содержит то, что я хочу, поскольку они могут вводить горячую клавишу, когда на входе присутствуют другие символы.

Который оставляет меня с мыслью, что мне придется проверять длину ввода и если он равен нулю, и они просто нажали эту горячую клавишу, чтобы она срабатывала.

Но мне было интересно, есть ли лучший способ сделать это?

  • 1
    По-прежнему выглядит, но проблема возникает, когда последовательность: SHIFT вниз, буква вниз, SHIFT вверх, буква вверх. Это, кажется, надежно теряет KEYUP в Chrome, IE и FF. В FF, если время ограничено, иногда также теряется KEYDOWN и запускается только KEYPRESS.
Теги:
keyboard

1 ответ

1
Лучший ответ

Событие Keypress, похоже, срабатывает последовательно. Проблемные комбинации клавиш не срабатывают Keyup, но они запускают событие ввода (которое, подобно Keyup, приходит после изменения входного значения). Однако вход не содержит информации о фактическом нажатии клавиши.

Я не знаю, какие условия вы действительно ищете в отношении содержимого ввода. Но прослушивание Keypress, а затем получение нового содержимого ввода при следующем событии ввода звучит так, как будто это может быть то, что вам нужно.

Что-то вроде:

var hotkey = false;
var lastChar = '';

$('#in').on('keypress', function(e) {
    hotkey = ((e.which > 16 || e.which < 16) && e.shiftKey);
    lastChar = e.which;    
});


$('#in').on('input', function(e) {
    if (hotkey)
        $("#out").append('<div>' + lastChar + ' + shiftKey triggered ' + '<br/> INPUT: ' + $("#in").val() + '</div>');
});
  • 0
    Хороший обходной путь. Я даже не знал о input событии. Оказывается, я могу просто использовать это, проверить длину ввода и определить, существует ли соответствующий символ на входе. Благодарю.
  • 1
    Я нашел это в процессе попытки ответить на вопрос, на самом деле, что удобно - это оказалось полезным в моем собственном проекте сегодня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню