Я разрабатываю приложение, где мне нужно выполнить некоторую пост-обработку, когда пользователь нажимает CMD + LEFT в определенном текстовом поле. Мне нужно сделать это после функциональности браузера по умолчанию (т.е. После того, как каретка займет первую позицию в текущей физической строке).
Проблема заключается в том, что keyup
не работает не для клавиши LEFT (или любой другой клавиши), если клавиша CMD не работает.
Я пробовал это с помощью клавиш CTRL и SHIFT и обнаружил, что активация ключа запускается, как ожидалось, для вторичного ключа. Поэтому, если вы выполняете CTRL + LEFT, а затем отпустите LEFT, а затем отпустите CTRL, вы получите четыре события в общей сложности, 2 нажатия клавиш и 2 клавиши. Тем не менее, для CMD-ключа мы получаем 2 keydowns, но только одно событие keyup (одно для самого CMD-ключа, когда мы его выпускаем в конце).
Я попробовал это с помощью SHIFT-ключа и обнаружил, что keyup запускается, как ожидалось, для вторичного ключа. Итак, если вы делаете SHIFT + LEFT, а затем отпустите LEFT, а затем отпустите SHIFT, вы получите всего 4 события, 2 нажатия клавиш и 2 клавиши. Тем не менее, для CMD-ключа мы получаем 2 keydowns, но только одно событие keyup (первое для CMD-ключа, когда мы его выпускаем в конце).
Что это может быть? Есть ли способ, по которому я могу получить keyup
для клавиши LEFT (или любой клавиши), когда CMD опущен?
Я пробую это с последним Google Chrome на OSX 10.9.5. Поведение точно так же и в Firefox. Так что это не проблема Chrome.
Демо: http://jsfiddle.net/techfoobar/xu0o11nh/4/
По существу:
$('#mytextbox')
// this gets correctly triggered for the meta key as well as the secondary key
// when you press CMD and LEFT in sequence, you get two lines in the console one for
// the CMD key and one for the LEFT key
.keydown(function(_e) {
console.log('Keydown: ' + _e.keyCode);
})
// however, if I release the LEFT key (while keeping the CMD key down)
// this does NOT get triggered for the LEFT key
.keyup(function(_e) {
console.log('Keyup: ' + _e.keyCode);
});