Безопасно ли читать с e.which?
Обычно в IE нет, вы получаете только keyCode
(хотя на keypress
это фактически код символа, а не ключкод).Ваш код может читать which
, потому что за кулисами jQuery копирует значение keyCode
в which
в IE.Без jQuery вам понадобится код отслеживания свойств, чтобы знать, какой из них выбрать.(Вы не можете всегда читать keyCode
на keypress
, потому что это не гарантировано, и это 0
в Firefox.)
Обратите внимание, что я не хочу обнаруживать символ: Я хочу определить ключ.
Вы не можете сделать это в keypress
, который дает только код символа (46, ASCII для .
).Вместо этого вам придется перехватывать keydown
, что дает вам доступ к реальному коду ключа (в свойстве keyCode
, а также в браузерах, которые не являются IE, в which
).
keyCode
сообщается для цифровой клавиатуры. .
/ ,
кнопка - 110 (ASCII для строчной буквы N).За исключением оперы, где 78, ASCII для заглавной буквы N и, следовательно, неотличимо от нажатия кнопки N
.
Таким образом, вы можете претендовать на событие keydown
и сохранять флаг, когда клавиша 110 или 78 находиласьдепрессия, затем претензия keypress
.Если был установлен флаг последнего keydown
, а свойство which
(charCode
) равно 46, return false
, чтобы не допустить нажатия клавиш, а затем вместо него вставьте ,
в точку фокусировки.(Это не совсем надежно, если одновременно нажимается несколько клавиш и происходит автоповтор.)
Обратите внимание, что вставка символа в фокусе сама по себе нетривиальна;см. много предыдущих вопросов здесь.Вам потребуется код ветвления для IE (document.selection.createRange().text=...
) и других современных браузеров (изменение ввода value
на основе selectionStart
/ selectionEnd
).Старые и мобильные или нишевые браузеры могут не поддерживать ни один из методов редактирования, поэтому обнаружите отсутствие этих свойств и оставьте клавиатуру в покое, если не можете это сделать.
Влияет ли операционная система на эти числовые значениякаким-то образом кодирует или это только браузер?Эти коды зависят от раскладки клавиатуры?
В общем, да, но не таким образом, что это повлияет на вас здесь.Ключевые события, как правило, по-прежнему очень изменчивы: кросс-браузер, кросс-клавиатура и кроссплатформенность;лучше всего их избегать, если вы можете.
Лично я считаю, что правильным решением для неправильного выбора раскладки клавиатуры, такого как десятичная точка испанского языка, будет изменение раскладки с помощью MSKLC .