4

我需要检测事件 keydown 和 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");
    }
);

您可以在这里尝试:http: //jsfiddle.net/8dqwW/
即使没有按下大写锁定,它也总是返回大写字母。

在这两个事件中,我如何检测用它的大小写的字母,无论是大写还是小写?

4

3 回答 3

4

keyup并且keydown无法检测到大写/小写。
只能keypress这样!

于 2013-06-10T15:26:19.540 回答
3

使用event.key和现代的 JS!

没有数字代码了。您可以直接检查密钥。例如"Enter""LeftArrow""r""R""keypress", "keydown", 或"keyup"将全部工作。

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);
});

你可以用正则表达式简化它

const key = event.key;
const isLowerCaseLetter = (/[a-z]/.test(key));
const isUpperCaseLetter = (/[A-Z]/.test(key));
于 2018-02-18T19:34:49.607 回答
1

如果字符转换为大写后仍然相同,则以大写开头:

if (fromCharCode(e.which).toUpperCase() == fromCharCode(e.which))

随着 jQuery 规范化e.which,并且keypress事件的工作方式略有不同,我会做类似的事情:

$('body').on({
    keypress: function(e) {
        var char = String.fromCharCode(e.which),
            isUpper = char == char.toUpperCase();
        console.log(char + ' is pressed' + (isUpper ? ' and uppercase' : ''))
    }
});

小提琴

于 2013-04-04T09:46:00.810 回答