2010-02-15 4 views
5
<script type="text/javascript" src="jquery-1.3.2.js"></script> 
<input id=a type="text" value='sss'/> 
<script type="text/javascript"> 
    $('#a').keyup(
    function(event){ 
    alert(String.fromCharCode(event.which)) 
    }) 
</script> 

вы можете проверить этот код в Брауэр,Почему всегда UpperCase в моем коде?

и всегда начеку UpperCase из charcode.

ответ

9

Сначала я подумал, что это ошибка, так как ожидаемое значение нижнего регистра возвращается для события keypress. Оказывается, что на keyup/keydown всегда возвращается ASCII прописная/несмещенная версия ключа.

С этой ссылкой: http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml

Будьте осторожны при обращении к свойству KEYCODE во время OnKeyDown или OnKeyUp события, так как она устанавливается, когда нажатием любой клавиши, в том числе не символьных клавиш, как «Shift ». Это означает, что если вы попытаетесь нажать «Shift + a» на , попробуйте и получите keyCode для «A», вы в всегда получите два ключа , а для «Shift» и один для «A» в этот заказ. То, что вы не получите независимо является KEYCODE для «а», , как KEYCODE всегда возвращает значение Юникода версии символа

  • Нажатие клавиши Shift прописные + а считается, что одиночный keypress мероприятие.
  • Нажатие Shift + a считается как два события keydown, когда клавиши нажаты, и два события keyup, когда клавиши отпускаются.
  • keypress возвращает состав значение одной или нескольких нажатых клавиш в унисон.
  • keydown и keyup вернуть значение одной клавишей при игнорировании любых комбинаций клавиш.

Теперь вот запутанная часть: по какой-то причине несмещенного значение ключа a возвращается как код ключа 65. Но 65 заглавных А в таблице ASCII. Итак, где-то вдоль линии браузер берет строчную букву a (код ASCII 97), преобразуя ее в верхний регистр A, а затем передавая ее keydown/keyup в качестве несмещенного символа. Странно, не так ли?

+0

Не уверен, что я бы назвал поведение «странным», это просто соглашение. https://developer.mozilla.org/en/DOM/event.charCode отмечает, что случай не соблюдается для событий keyCode. «KeyCode» сообщает вам, какой * ключ * был нажат, а не символ, который является результатом его. И поскольку все буквы напечатаны в верхнем регистре практически на всех клавиатурах, кажется, имеет смысл использовать вариант с верхним регистром. Хороший ответ в противном случае. :) – deceze

1

(догадка)

Это ссылки на Key, который не имеет дела. Случай определяется тем, выключен или нет ключ сдвига.

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