【问题标题】:How to detect Caps Lock is ON on web browser on Android Devices using JavaScript?如何使用 JavaScript 在 Android 设备上的网络浏览器上检测 Caps Lock 是否打开?
【发布时间】:2021-06-18 20:20:59
【问题描述】:

我们可以使用KeyboardEvent.getModifierState()很好地检测CapsLock是否在iPhone网络浏览器上打开/关闭,并带有示例代码,

function checkCapsLock(e) {
  if (e.getModifierState("CapsLock")) {
    alert("Caps ON");
  }
}

它不适用于 Android 设备上的浏览器。我已经尝试了许多其他解决方案,在事件上使用 charCode、keyCode、shiftKey、which 等方法,监听器如 keyup、keydown、keypress 等。但没有运气。

我已经浏览了stackoverflow 中提到的答案以及其他链接。但还是没有运气。

有什么解决方法吗?

PS:这不是重复的问题,我是在问安卓网络浏览器的问题!

编辑:W3C,我们可以观察到 CapsLock 可以在 iPhone 上的 Web 或移动网络浏览器上检测到,但在 Android 设备上的网络浏览器上却检测不到。

【问题讨论】:

  • 它应该以同样的方式工作。您使用什么浏览器/版本?
  • @ThomasSablik:我检查了 Android Chrome 浏览器 v89.0.4389.0。
  • developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/… 说它应该从 Chrome 48 开始工作。
  • @ThomasSablik:没错,即使我检查了can I use,但它的表现仍然不如预期!
  • @AniruddhaShevle 正如我在您评论的要点上所说的那样,每个软件键盘对待听众的方式都不同。根据所使用的软件键盘,您可能会注意到未正确触发事件。你用的是哪个软键盘?

标签: javascript android w3c android-browser capslock


【解决方案1】:

虽然此代码适用于某些 Android 设备,但它并非适用于所有设备,因为 e.ShiftKey 在 Android 中被证明是错误的。在 android 上,它实际上取决于您的键盘。

这是最好的,我能想到的。

document.addEventListener ('keyup', function (event){ 
        
    let status = checkCapsLock(event);
    
    document.getElementById("status").innerHTML += ('<span class="'+ status +'">Status: ' + status + '</span>');

});  
 

function checkCapsLock(e) {
  e = e ? e : window.event;
  
  if (e.getModifierState('CapsLock'))
    return true;
    
  let isShiftOn = e.shiftKey;
  
  let s = e.key;
  
  if(s.length != 1){
  let keyCode = e.keyCode; //e.KeyCode is always 229 on Android;
      if(keyCode == 229) 
        s = (e.target.value).split('').pop();
  }
     
  if ( (s.length != 0 ) && (s.toUpperCase() === s) && !isShiftOn )
        return true;
  return false;
}
span{
  display: block;
  background: red;
}

span.true{
  background: green;
}
Input: <input id="targetInput">
<p id="status"></p>

【讨论】:

  • 感谢您的回复,但是当我们按下 Shift + 任何其他字符时,这也会触发绿色输出!
  • 嗨@AniruddhaShevle,我也遇到了同样的问题,你找到解决方法了吗?提前致谢!
  • @BalB:不,如果你找到了,请告诉我们。谢谢。
猜你喜欢
  • 2015-08-25
  • 2012-09-18
  • 2011-07-31
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多