小编典典

你如何判断大写锁定是否在使用 JavaScript?

all

你如何判断大写锁定是否在使用 JavaScript?

不过有一个警告:我用谷歌搜索了它,我能找到的最好的解决方案是onkeypress在每个输入上附加一个事件,然后每次检查按下的字母是否为大写,如果是,则检查是否也按下了
shift。如果不是,则必须打开大写锁定。这感觉真的很脏而且只是...... 浪费 - 肯定有比这更好的方法吗?


阅读 109

收藏
2022-05-17

共1个答案

小编典典

你可以试一试。添加了一个工作示例。当焦点放在输入上时,打开大写锁定会使 LED 变为红色,否则变为绿色。(尚未在 mac/linux 上测试过)

注意:两个版本都适用于我。感谢评论中的建设性意见。

旧版本:https
://jsbin.com/mahenes/edit?js,output

另外,这是一个修改版本(有人可以在mac上测试并确认)

新版本: https
://jsbin.com/xiconuv/edit?js,输出

新版本:

function isCapslock(e) {
  const IS_MAC = /Mac/.test(navigator.platform);

  const charCode = e.charCode;
  const shiftKey = e.shiftKey;

  if (charCode >= 97 && charCode <= 122) {
    capsLock = shiftKey;
  } else if (charCode >= 65 && charCode <= 90
    && !(shiftKey && IS_MAC)) {
    capsLock = !shiftKey;
  }

  return capsLock;
}

旧版:

function isCapslock(e) {
  e = (e) ? e : window.event;

  var charCode = false;
  if (e.which) {
    charCode = e.which;
  } else if (e.keyCode) {
    charCode = e.keyCode;
  }

  var shifton = false;
  if (e.shiftKey) {
    shifton = e.shiftKey;
  } else if (e.modifiers) {
    shifton = !!(e.modifiers & 4);
  }

  if (charCode >= 97 && charCode <= 122 && shifton) {
    return true;
  }

  if (charCode >= 65 && charCode <= 90 && !shifton) {
    return true;
  }

  return false;
}

对于国际字符,可以根据需要对以下键添加额外的检查。您必须获取您感兴趣的字符的键码范围,可能是通过使用一个键映射数组来保存您正在处理的所有有效用例键…

大写AZ或’胫’、’脰’、’脺’、小写aZ或0-9或’盲’、’枚’、’眉’

上面的键只是示例表示。

2022-05-17