在Javascript中,如何检测keydown和keyup事件中的字符大小写(上/小)?



我需要检测事件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/
它总是返回大写字母,即使没有按下大写锁定。

在这两个事件中如何检测按大小写的字母

keyupkeydown无法检测大小写。
只有keypress可以这样做!

使用event.key和现代JS!

不再有数字编码。您可以直接查看key。例如:"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));

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

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

小提琴

相关内容

  • 没有找到相关文章

最新更新