Я работаю над запуском событий по определенным комбинациям клавиш, которые проверяют значение ввода, в который они были введены.
Проблема, с которой я сталкиваюсь, заключается в том, что можно запускать keypress
или keydown
и вводить символ без запуска keyup
.
И наоборот только keyup
событие может считывать значение ввода с вновь введенным характером, поскольку как keydown
и keypress
огня перед символом добавляются на вход.
(Примечание: нажмите сдвиг и любой другой символ. Если вы удерживаете shift, а затем нажмите и отпустите другой символ, произойдет событие keyup
, но если вы нажмете и отпустите shift одновременно с другим ключом, событие keyup
не будет срабатывать. )
Единственные решения, о которых я могу думать, запускают событие keyup
событие keydown
, но это может вызвать проблемы с другими местами.
К сожалению, я также не могу просто предположить, что, поскольку они нажимали эту комбинацию клавиш, что поле ввода содержит то, что я хочу, поскольку они могут вводить горячую клавишу, когда на входе присутствуют другие символы.
Который оставляет меня с мыслью, что мне придется проверять длину ввода и если он равен нулю, и они просто нажали эту горячую клавишу, чтобы она срабатывала.
Но мне было интересно, есть ли лучший способ сделать это?
Событие 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>');
});
input
событии. Оказывается, я могу просто использовать это, проверить длину ввода и определить, существует ли соответствующий символ на входе. Благодарю.