【问题标题】:In Javascript, How to detect the character case (upper/lower) in keydown & keyup events?在 Javascript 中,如何检测 keydown 和 keyup 事件中的字符大小写(大写/小写)?
【发布时间】:2013-04-04 09:42:10
【问题描述】:

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

在这两个事件中,我怎样才能检测到字母的大小写是大写还是小写?

【问题讨论】:

    标签: jquery case-sensitive keydown keyup


    【解决方案1】:

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

    【讨论】:

    • 你可以检测是否按下了 shift,作为一个 hack。但不是大写锁定:(
    • 对于 infor,keypress 现在是 deprecated :(
    【解决方案2】:

    使用 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));
    

    【讨论】:

      【解决方案3】:

      如果转换成大写后字符还是一样,则以:开头的大写:

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

      FIDDLE

      【讨论】:

      • 您的第一个代码没有帮助,因为 e.which 已经是大写的,所以布尔表达式总是会解析为 true。而你的第二个代码使用 keypress 而不是 keydown,这对 keyup 毫无帮助。
      • @AshrafBashir - 这是因为 keyup 和 keydown 没有区分字符是大写还是小写,它为两者返回相同的代码,因此使用这些事件不可能知道字符是大写还是小写。你可以听 shift 键,但这也不能保证。
      • 当提出问题的人在几个月后发布自己的答案,说了完全相同的事情,然后接受了,这总是很好的!
      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      相关资源
      最近更新 更多