Проблема с javascript onkeydown - event.which дают символы только в верхнем регистре - PullRequest
4 голосов
/ 28 марта 2012

Я написал фрагмент кода javascript для нажатия клавиши в текстовой области.Я использовал событие onkeydown для захвата нажатой клавиши и вызываю функцию, когда событие срабатывает.В рамках функции я использую event.which для нажатия клавиши.Но это не дает правильную нажатую клавишу.Для любого нажатого символа он дает значение Ascii соответствующего символа в верхнем регистре (только от 65 до 90).Он не дает значения Ascii для символов нижнего регистра, то есть от 97 до 122, даже если был напечатан символ нижнего регистра.Например, если я наберу 'a', это даст Ascii значение 'A' Кто-нибудь знает, почему это происходит?Вот код, который я использую -

var mainDoc = document.getElementById("mainDoc");
mainDoc.onkeydown = function(event){keyPress(event);}
function keyPress(event)
{
    alert("key code : "+ event.which + " );
}

Я пытался использовать событие onkeypress.Кажется, это работает нормально, но не захватывает alt, control, клавиши со стрелками и т. Д.

Ответы [ 4 ]

6 голосов
/ 28 марта 2012

keydown и keyup (в основном) не дают вам символов вообще , они дают вам коды клавиш. keypress - это место, где вы получаете символы (и, если вам нужно знать, также состояние клавиш-модификаторов по состоянию на момент ввода этого символа в объектах событий ctrlKey, altKey, shiftKey и metaKey свойства). Эта страница с любовью погружается в безумие - события клавиатуры в JavaScript ...

1 голос
/ 28 марта 2012

Проблема в том, что событие keydown будет сообщать нажатия клавиш - то есть физические клавиши нажаты.Событие keypress сообщит о переведенных клавишах, что означает символ, полученный из нажатых клавиш ( Shift + a == A),Чтобы получить действительные ключи, вам может потребоваться отслеживать как keydown / keyup (для отслеживания клавиш-модификаторов), так и keypress (для отслеживания фактического буквенно-цифрового пользовательского ввода.)

0 голосов
/ 28 марта 2012

С http://www.bloggingdeveloper.com/post/KeyPress-KeyDown-KeyUp-The-Difference-Between-Javascript-Key-Events.aspx

Чтобы понять разницу между нажатием клавиши и нажатием клавиши, полезно понять разницу между «символом» и «ключом».«Клавиша» - это физическая кнопка на клавиатуре компьютера, а «символ» - это символ, набираемый нажатием кнопки.Теоретически, события нажатия клавиш и нажатия клавиш представляют собой нажатие или отпускание клавиш, в то время как событие нажатия клавиш представляет вводимый символ.Реализация теории не одинакова во всех браузерах.

0 голосов
/ 28 марта 2012
function getKeyCode(event) {
   event = event || window.event;
   return event.keyCode;
}

use event.keyCode даст вам код ключа;)

gr

...