Событие keyPress
- это то, что вам нужно, чтобы узнать, какой символ был введен. ( См. Ниже способ обхода события нажатия клавиши ).
keydown
и keyup
предоставляют код, указывающий, какая клавиша нажата, а keypress
указывает, какой символ был введен.
С помощью jQuery e.which
вы можете получить код клавиши, а с помощью String.fromCharCode вы можете получить определенный нажатый символ (включая shiftKey ) .
DEMO: http://jsfiddle.net/9TyzP/3
Код:
element.on ('keypress', function (e) {
console.log(String.fromCharCode(e.which));
})
Заметьте, я сказал jQuery e.which
, потому что разные браузеры используют разные свойства для хранения этой информации. jQuery нормализует свойство .which
, поэтому вы можете надежно использовать его для получения кода ключа.
Обходной путь для keydown
Однако вы можете написать простой обходной путь, чтобы заставить нажатый символ работать с keydown
.. Обходным путем является создание объекта с ключом в качестве charCode без нажатия клавиши Shift, а значение - с помощью клавиши Shift.
Примечание: Как @ Саджан Саркар указал, что есть некоторые различия в значении e.which
кода ключа, возвращаемого из другого браузера. Подробнее здесь
Обновлен код DEMO для нормализации значения кросс-браузерного keyCode. Протестировано и проверено в IE 8, FF и Chrome.
Полный код ниже и обновленный DEMO: http://jsfiddle.net/S2dyB/17/
$(function() {
var _to_ascii = {
'188': '44',
'109': '45',
'190': '46',
'191': '47',
'192': '96',
'220': '92',
'222': '39',
'221': '93',
'219': '91',
'173': '45',
'187': '61', //IE Key codes
'186': '59', //IE Key codes
'189': '45' //IE Key codes
}
var shiftUps = {
"96": "~",
"49": "!",
"50": "@",
"51": "#",
"52": "$",
"53": "%",
"54": "^",
"55": "&",
"56": "*",
"57": "(",
"48": ")",
"45": "_",
"61": "+",
"91": "{",
"93": "}",
"92": "|",
"59": ":",
"39": "\"",
"44": "<",
"46": ">",
"47": "?"
};
$(element).on('keydown', function(e) {
var c = e.which;
//normalize keyCode
if (_to_ascii.hasOwnProperty(c)) {
c = _to_ascii[c];
}
if (!e.shiftKey && (c >= 65 && c <= 90)) {
c = String.fromCharCode(c + 32);
} else if (e.shiftKey && shiftUps.hasOwnProperty(c)) {
//get shifted keyCode value
c = shiftUps[c];
} else {
c = String.fromCharCode(c);
}
//$(element).val(c);
}).on('keypress', function(e) {
//$(element).val(String.fromCharCode(e.which));
});
});
Подробнее о событиях клавиатуры -
События keydown, keypress и keyup запускаются, когда пользователь нажимает клавишу.
keydown Запускается, когда пользователь нажимает клавишу. Повторяется, пока пользователь нажимает клавишу.
нажатие клавиши Запускается при вставке фактического символа, например, в текстовый ввод. Повторяется, пока пользователь нажимает клавишу.
keyup Запускается, когда пользователь отпускает ключ, после выполнения действия по умолчанию для этого ключа.
При первом нажатии клавиши отправляется событие keydown
. Если ключ не является ключом-модификатором, отправляется событие keypress
. Когда пользователь отпускает ключ, отправляется событие keyup
.
Когда клавиша нажата и удерживается нажатой, она начинает автоматически повторяться. Это приводит к последовательности событий, подобной следующему:
keydown
keypress
keydown
keypress
<<repeating until the user releases the key>>
keyup
DEMO: http://jsfiddle.net/9TyzP/1/
keyup, keydown vs keypress
События нажатия клавиш и нажатия клавиш представляют собой нажатие или отпускание клавиш, в то время как событие нажатия клавиш представляет вводимый символ.
DEMO: http://jsfiddle.net/9TyzP/
Рекомендации:
https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent
http://www.quirksmode.org/dom/events/keys.html
http://unixpapa.com/js/key.html