Проблема с javascript onkeydown - event.which предоставляет символы только в верхнем регистре

Я написал фрагмент кода 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, стрелки и т.д.

Ответ 1

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

Ответ 2

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

Ответ 3

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

Чтобы понять разницу между keydown и keypress, это полезно понять разницу между "характером" и "Ключ". "Ключ" - это физическая кнопка на клавиатуре компьютера, в то время как "Символ" - это символ, набранный нажатием кнопки. Теоретически события keydown и keyup представляют собой клавиши, которые нажаты или выпущены, в то время как событие нажатия клавиши представляет собой типизируемый символ. реализация теории не одинакова во всех браузерах.

Ответ 4

function getKeyCode(event) {
   event = event || window.event;
   return event.keyCode;
}

использовать event.keyCode даст код ключа;)

g.r.