在“onfocus”事件中检查 CapsLock 是否打开

问题描述 投票:0回答:4

我的以下代码用于检查 Capslock 是否打开,在“onkeypress”事件中工作正常。

但我想要它用于“onfocus”事件。 我尝试将控件的“onkeypress”替换为“onfocus”,但它对我不起作用。

有什么帮助吗? (在 javascript 或 Jquery 中)

 <script type="text/javascript" language="Javascript">
    function capLock(e) {
        kc = e.keyCode ? e.keyCode : e.which;
        sk = e.shiftKey ? e.shiftKey : ((kc == 16) ? true : false);
        if (((kc >= 65 && kc <= 90) && !sk) || ((kc >= 97 && kc <= 122) && sk))
            document.getElementById('divMayus').style.visibility = 'visible';
        else
            document.getElementById('divMayus').style.visibility = 'hidden';
    }
</script>

<input type="text" name="txtuname" />
<input type="password" name="txtPassword" onkeypress="capLock(event)" />
<div id="divMayus" style="visibility:hidden">Caps Lock is on.</div> 
javascript jquery onfocus key-events
4个回答
5
投票

有一个名为 capslockstate 的 jQuery 插件,它将跟踪大写锁定键的状态,允许您在需要时使用该信息。

它将监视整个页面的状态,然后您可以在所需元素获得焦点时检索状态。

它也基于观察按键操作,但不限于较低的 ASCII 字符,并处理诸如 Caps Lock 键本身被按下的情况。

你的情况会变成这样:

<script src="{path-to}/jquery-capslockstate.js"></script>
<script>
    $(document).ready(function() {
        $(window).capslockstate();

        $(window).bind("capsOn", function(event) {
            if ($("#txtPassword:focus").length > 0) {
                document.getElementById('divMayus').style.visibility = 'visible';
            }
        });
        $(window).bind("capsOff capsUnknown", function(event) {
            document.getElementById('divMayus').style.visibility = 'hidden';
        });
        $("#txtPassword").bind("focusout", function(event) {
            document.getElementById('divMayus').style.visibility = 'hidden';
        });
        $("#txtPassword").bind("focusin", function(event) {
            if ($(window).capslockstate("state") === true) {
                document.getElementById('divMayus').style.visibility = 'visible';
            }
        });
    });
</script>

<input type="text" name="txtuname" />
<input type="password" name="txtPassword" id="txtPassword" />
<div id="divMayus" style="visibility:hidden">Caps Lock is on.</div>

请注意,我只对基本部分进行了 jQuery 化,还可以做更多工作。


1
投票

不幸的是 - 事件对象的 keyCode 属性仅在基于键的事件上发送(出于明显的原因),这就是为什么它不能在 focus、onclick 等上工作。

没有任何其他 JavaScript 方法可以做到这一点 - 尽管如果您使用 flash,则有一个潜在的解决方案 - 但这对于您的要求来说似乎有些过大了......


0
投票

似乎无法检测焦点上的大写锁定 我想这可能对您有帮助,请访问此

http://jaspreetchahal.org/jquery-caps-lock-detection-plugin/


0
投票

其实很简单.. 使用 mousedown 而不是焦点..

#当我们将鼠标放入输入字段时检测大写锁定是否打开的代码...

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <input type="text" name="" id="inputme">
    <p id="log" style="color:red"></p>
    <script>
        function checkCapsLock(e){
        if (e.getModifierState('CapsLock'))
            log.textContent=`capsLock is ON!`;
        else 
            log.textContent=``;
        }
    inputme.addEventListener('mousedown', checkCapsLock);
    inputme.addEventListener('keyup', checkCapsLock);
    </script>
</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.