问题
I need to detect the case of characters in event keydown and keyup
$('body').keydown(
function(event) {
var charCode = (event.which) ? event.which : event.keyCode;
var char = String.fromCharCode(charCode);
console.log(char + " is down pressed");
}
);
$('body').keyup(
function(event) {
var charCode = (event.which) ? event.which : event.keyCode;
var char = String.fromCharCode(charCode);
console.log(char + " is up pressed");
}
);
You may try it here: http://jsfiddle.net/8dqwW/
It's always returning the upper case letter even if no caps lock is pressed.
How can I detect the letter pressed with its case, either upper or lower in those two events ?
回答1:
keyup and keydown cannot detect the upper/lower case.
Only keypress can do so !
回答2:
If the character is still the same after converting it to uppercase, it was uppercase to begin with :
if (fromCharCode(e.which).toUpperCase() == fromCharCode(e.which))
As jQuery normalizes e.which, and the keypress event works a little differently, I'd do something like :
$('body').on({
keypress: function(e) {
var char = String.fromCharCode(e.which),
isUpper = char == char.toUpperCase();
console.log(char + ' is pressed' + (isUpper ? ' and uppercase' : ''))
}
});
FIDDLE
回答3:
Use event.key and modern JS!
No number codes anymore. You can check key directly. For example "Enter", "LeftArrow", "r", or "R". "keypress", "keydown", or "keyup" will all work.
document.addEventListener("keypress", function (event) {
const key = event.key;
const keyLower = key.toLowerCase();
// Check it is a char between A-Z, not numbers, etc.
if (key.length !== 1 || keyLower < "a" || keyLower > "z") {
return;
}
// Check for case
const isUpperCase = (key !== keyLower);
});
You could simplify it with a regex
const key = event.key;
const isLowerCaseLetter = (/[a-z]/.test(key));
const isUpperCaseLetter = (/[A-Z]/.test(key));
来源:https://stackoverflow.com/questions/15807715/in-javascript-how-to-detect-the-character-case-upper-lower-in-keydown-keyup