Проблема с 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, клавиши со стрелками и т. Д.

Ответы на вопрос(4)

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

G.R.

 Hermann Ingjaldsson19 апр. 2013 г., 12:35
не различает прописные и строчные буквы

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

 Narayana16 апр. 2012 г., 09:10
Дотошная статья! Проверьте заключение, если вы нетерпеливы.
 Code maniac29 мар. 2012 г., 12:25
Большое спасибо за ответ. Я проверю ссылку.

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

 Alexander Pavlov28 мар. 2012 г., 12:13
@ T.J.Crowder Я хотел сказать «контролировать клавиши-модификаторы, нажимаемые в одиночку» (так как это, по-видимому, ищет ОП) - вы не получите никакихkeypress событие для них (угадайте вместе с клавишами курсора и некоторыми другими.)
 T.J. Crowder28 мар. 2012 г., 12:10
«Для того, чтобы получить реальные ключи, вам может потребоваться отслеживать как keydown / keyup (для мониторинга клавиш-модификаторов) ...» Там нет необходимости отслеживать ключи модификаторов самостоятельно, вот чтоctrlKey, altKeyи т. д., свойстваkeypress Объект события события предназначен для.
 T.J. Crowder28 мар. 2012 г., 12:33
@ Александр: Ах, ладно, теперь я понимаю, что вы имеете в виду.

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

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

Ваш ответ на вопрос