开发中为了提升网页的可用性,在网页中检测键盘大小写键 caps lock
开启状态很有必要,尤其在输入密码的时候,我们并不能看见输入的字符是什么,如果是由于大小写错误我们并不能第一时间感知到。
如下实例演示,当我们在密码输入框中输入内容时,如果我们的大小写键是开启的状态,就会得到“Caps lock is on”这样的提示信息。
虽然目前浏览器还没有提供现成的 API 来查询 caps lock
键的开启的状态,但是我们可以采用对按键 keyup
和 keydown
事件的监听,然后通过 KeyboardEvent
对象的
getModifierState 方法来获取。
window.addEventListener('keydown', detectCapsLock)
window.addEventListener('keyup', detectCapsLock)
function detectCapsLock(e) {
if (e.getModifierState('CapsLock')) {
// caps lock is on
} else {
// caps lock is off
}
}
我们必须同时监听 keyup
和 keydown
按键事件,因为,通常情况下,浏览器会在某个按键按下时触发 keydown
事件,在释放该键时触发 keyup
事件,但是对于键盘上的 caps lock
键而言,
每次按下只会触发其中的一个事件。
当我们按下 caps lock
键以打开大写锁定时,所有浏览器仅发送一个 keydown 事件。当我们按下 caps lock
键以关闭大写锁定时,Firefox 浏览器只触发了 keydown
事件,但是 Chrome、Safari 和
Edge 只会触发 keyup
事件(其实就相当于在大写开启状态下,Shift
键被同时按下)。