2015-01-12 4 views
1

Я не получаю правильные коды для некоторых клавиш цифровой клавиатуры, удерживая клавишу shift. Это происходит только для клавиш с цифрами и клавиши point/del на цифровой клавиатуре, когда включен ключ num-lock.jquery keyup hold shift and number pad keys

$('body').keyup(function (e) { 

      alert('key code ' + e.keyCode + ' ewhich: ' + e.which); 
}); 

С Num-Lock On:

Shift + numberPad1 выводит код 16, и поэтому для всех цифровых клавиш на клавиатуре и точка/DEL ключ.

Любые объяснения для этого?

ИСПОЛЬЗОВАНИЯ CHROME

+0

16 является 'Shift' код; [здесь ссылка] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx) – blgt

+0

Какой браузер вы используете? – DMishra

+0

Я тестирую на Chrome – VMh

ответ

0

KeyUp события срабатывает, когда вы до последнего ключа, что означает, когда вы нажимаете Shift + numpad1, сдвиг кеты вверх на последнем, поэтому вы получаете 16 код.

Используйте событие Keydown, которое даст вам точный результат. Вы хотите проследить сдвиг + код ключа, то вы должны Генделя смены ключа seprately

exp-

$ (документ) .ready (функция() {

$("body").keydown(function (e) { 

     console.log('key code ' + e.keyCode + ' ewhich: ' + e.which); 

    }); 

}); 
+0

Спасибо за ваш ответ. Клавиша Shift удерживается нажатой, а не вверх, тем, что идет вверх, является клавиша numpad. Это очень странно, потому что делать то же самое (удерживая сдвиг нажатой) и пробовать любую клавишу, кроме numpads, возвращает код другой клавиши, а не код сдвига (16). – VMh

+0

Я не могу игнорировать эти коды 16, потому что, когда keyup получает код 16, я вызываю действие. Это то, что я делаю: в то время как сдвиг нажат, я читаю введенные числовые клавиши, чтобы сделать число, объединив все введенные числа, а затем, когда сдвиг выпущен, я вызываю действие с использованием этого числа в качестве аргумента для функции. Я реализую функцию быстрого доступа. – VMh

0

I тестировал здесь, и в этом случае, может быть, два раза приходилось на клавиатуру, один для ключа, который вы хотите, а другой - для переключения. Попробуйте проигнорировать код 16, и он будет работать нормально.

$('body').keyup(function (e) { 
    if(!e.keyCode == 16) 
    console.log('key code ' + e.keyCode + ' shiftKey' + e.shiftKey); 
}); 

Или попробуйте использовать Keypress

$('body').keypress(function (e) { 
    console.log('key code ' + e.keyCode + ' shiftKey' + e.shiftKey); 
}); 
+0

Спасибо за ваш ответ. Дело в том, что я не могу игнорировать KeyUp для смены, так как мне нужно, чтобы оно совершило действие. Это то, что я делаю: в то время как сдвиг нажат, я читаю введенные числовые клавиши, чтобы сделать число, объединив все введенные числа, а затем, когда сдвиг выпущен, я вызываю действие с использованием этого числа в качестве аргумента для функции. Я реализую функцию быстрого доступа. – VMh

+0

Так что я не понимаю, в чем ваша проблема. Здесь, используя keyup, всегда будет запускать событие два раза, один для переключения ключа и другого. Обратите внимание, что номера numpad имеют разные коды обычной клавиатуры. – rneves

 Смежные вопросы

  • Нет связанных вопросов^_^