你怎么知道使用JavaScript是否打开大写锁定?

时间:2008-12-08 06:22:31

标签: javascript keyboard capslock

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

但有一点需要注意:我确实谷歌了,我找到的最佳解决方案是将onkeypress事件附加到每个输入,然后每次检查按下的字母是否为大写,如果是,则检查如果换班也被压低了。如果不是,那么必须打开大写锁定。这感觉非常脏,只是...... 浪费 - 肯定有比这更好的方法吗?

31 个答案:

答案 0 :(得分:131)

在jQuery中,

$('#example').keypress(function(e) { 
    var s = String.fromCharCode( e.which );
    if ( s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey ) {
        alert('caps is on');
    }
});

避免错误,例如退格键,需要s.toLowerCase() !== s

答案 1 :(得分:91)

发现这个有趣...... 你可以尝试一下..

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;

}

对于国际字符,可以根据需要为以下键添加附加检查。您必须获取您感兴趣的字符的键码范围,可以使用键盘映射数组,该数组将包含您要处理的所有有效用例键...

大写字母A-Z或'Ä','Ö','Ü', 小写字母a-Z或0-9或'ä','ö','ü'

上述键只是样本表示。

答案 2 :(得分:89)

您可以使用KeyboardEvent检测多个密钥,包括最近浏览器上的大写锁定。

getModifierState function将提供以下状态:

  • 替代
  • 同时按下AltGraph
  • 大写锁定
  • 控制
  • Fn(Android)
  • 数字锁定
  • OS(Windows&amp; Linux)
  • ScrollLock键

This demo适用于所有主流浏览器,包括移动版(caniuse)。

passwordField.addEventListener( 'keydown', function( event ) {
  var caps = event.getModifierState && event.getModifierState( 'CapsLock' );
  console.log( caps ); // true when you press the keyboard CapsLock key
});

答案 3 :(得分:23)

您可以使用文档上的按键捕获使用“is letter uppercase and no shift pressed”来检测大写锁定。但是,最好确保没有其他按键处理程序在它到达文档处理程序之前弹出事件泡泡。

document.onkeypress = function ( e ) {
  e = e || window.event;
  var s = String.fromCharCode( e.keyCode || e.which );
  if ( (s.toUpperCase() === s) !== e.shiftKey ) {
    // alert('caps is on')
  }
}

您可以在捕获阶段在支持该事件的浏览器中抓取该事件,但它似乎毫无意义,因为它不适用于所有浏览器。

我想不出任何其他实际检测大写锁定状态的方法。无论如何,检查很简单,如果键入了不可检测的字符,那么......就没有必要进行检测。

去年有an article on 24 ways。非常好,但缺乏国际性支持(使用toUpperCase()来解决这个问题。)

答案 4 :(得分:11)

在JQuery中。这包括Firefox中的事件处理,并将检查意外的大写和小写字符。这预设了一个<input id="password" type="password" name="whatever"/>元素和一个id为“capsLockWarning”的单独元素,它具有我们想要显示的警告(但是否则会被隐藏)。

$('#password').keypress(function(e) {
    e = e || window.event;

    // An empty field resets the visibility.
    if (this.value === '') {
        $('#capsLockWarning').hide();
        return;
    }

    // We need alphabetic characters to make a match.
    var character = String.fromCharCode(e.keyCode || e.which);
    if (character.toUpperCase() === character.toLowerCase()) {
        return;
    }

    // SHIFT doesn't usually give us a lowercase character. Check for this
    // and for when we get a lowercase character when SHIFT is enabled. 
    if ((e.shiftKey && character.toLowerCase() === character) ||
        (!e.shiftKey && character.toUpperCase() === character)) {
        $('#capsLockWarning').show();
    } else {
        $('#capsLockWarning').hide();
    }
});

答案 5 :(得分:11)

许多现有的答案会在未按下班次时检查大写锁定,但如果您按下shift并获得小写,则不会检查大写,或者是否会检查但是也不会检查大写锁定是否已关闭,或者是否会检查为此,但会将非alpha键视为“关闭”。这是一个改进的jQuery解决方案,如果按下带有大写字母的阿尔法键(移位或无移位)将显示警告,如果按下没有大写字母的阿尔法键,将关闭警告,但不会关闭或打开警告按下数字或其他键。

$("#password").keypress(function(e) { 
    var s = String.fromCharCode( e.which );
    if ((s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey)|| //caps is on
      (s.toUpperCase() !== s && s.toLowerCase() === s && e.shiftKey)) {
        $("#CapsWarn").show();
    } else if ((s.toLowerCase() === s && s.toUpperCase() !== s && !e.shiftKey)||
      (s.toLowerCase() !== s && s.toUpperCase() === s && e.shiftKey)) { //caps is off
        $("#CapsWarn").hide();
    } //else upper and lower are both same (i.e. not alpha key - so do not hide message if already on but do not turn on if alpha keys not hit yet)
  });

答案 6 :(得分:6)

这里的最佳答案对我来说不起作用有几个原因(未注释的代码带有死链接和不完整的解决方案)。所以我花了几个小时尝试每个人,并尽我所能:这是我的,包括jQuery和非jQuery。

的jQuery

请注意,jQuery会对事件对象进行规范化,因此会丢失一些检查。我还将它缩小到所有密码字段(因为这是需要它的最大原因)并添加了警告消息。这已经在Chrome,Mozilla,Opera和IE6-8中进行了测试。稳定并捕获所有大写锁定状态除非按下数字或空格。

/* check for CAPS LOCK on all password fields */
$("input[type='password']").keypress(function(e) {

    var $warn = $(this).next(".capsWarn"); // handle the warning mssg
    var kc = e.which; //get keycode
    var isUp = (kc >= 65 && kc <= 90) ? true : false; // uppercase
    var isLow = (kc >= 97 && kc <= 122) ? true : false; // lowercase
    // event.shiftKey does not seem to be normalized by jQuery(?) for IE8-
    var isShift = ( e.shiftKey ) ? e.shiftKey : ( (kc == 16) ? true : false ); // shift is pressed

    // uppercase w/out shift or lowercase with shift == caps lock
    if ( (isUp && !isShift) || (isLow && isShift) ) {
        $warn.show();
    } else {
        $warn.hide();
    }

}).after("<span class='capsWarn error' style='display:none;'>Is your CAPSLOCK on?</span>");

没有jQuery

其他一些无jQuery解决方案缺少IE回退。 @Zappa打了补丁。

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

    var kc = ( e.keyCode ) ? e.keyCode : e.which; // get keycode
    var isUp = (kc >= 65 && kc <= 90) ? true : false; // uppercase
    var isLow = (kc >= 97 && kc <= 122) ? true : false; // lowercase
    var isShift = ( e.shiftKey ) ? e.shiftKey : ( (kc == 16) ? true : false ); // shift is pressed -- works for IE8-

    // uppercase w/out shift or lowercase with shift == caps lock
    if ( (isUp && !isShift) || (isLow && isShift) ) {
        alert("CAPSLOCK is on."); // do your thing here
    } else {
        // no CAPSLOCK to speak of
    }

}

注意:查看@Borgar,@ Joe Liversedge和@Zappa的解决方案,以及@Pavel Azanov开发的插件,我没有尝试过,但这是一个好主意。如果有人知道扩展范围超出A-Za-z的方法,请编辑。此外,这个问题的jQuery版本作为重复关闭,所以这就是我在这里发布的原因。

答案 7 :(得分:5)

我知道这是一个古老的话题,但我想我会反馈,以防它帮助别人。这个问题的答案似乎都不适用于IE8。但我发现这个代码在IE8中有效。 (尚未测试IE8以下的任何内容)。如果需要,可以很容易地为jQuery修改它。

function capsCheck(e,obj){ 
    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('#'+obj.id).style.visibility = 'visible';
    } 
    else document.getElementById('#'+obj.id).style.visibility = 'hidden';
}

该函数通过onkeypress事件调用,如下所示:

<input type="password" name="txtPassword" onkeypress="capsCheck(event,this);" />
<div id="capsWarningDiv" style="visibility:hidden">Caps Lock is on.</div> 

答案 8 :(得分:5)

这是一种解决方案,除了在写入时检查状态外,每次按下 Caps Lock 键时也会切换警告消息(有一些限制)。

它还支持A-Z范围之外的非英文字母,因为它会检查toUpperCase()toLowerCase()的字符串字符,而不是检查字符范围。

$(function(){
  //Initialize to hide caps-lock-warning
  $('.caps-lock-warning').hide();

  //Sniff for Caps-Lock state
  $("#password").keypress(function(e) {
    var s = String.fromCharCode( e.which );
    if((s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey)||
       (s.toUpperCase() !== s && s.toLowerCase() === s && e.shiftKey)) {
      this.caps = true; // Enables to do something on Caps-Lock keypress
      $(this).next('.caps-lock-warning').show();
    } else if((s.toLowerCase() === s && s.toUpperCase() !== s && !e.shiftKey)||
              (s.toLowerCase() !== s && s.toUpperCase() === s && e.shiftKey)) {
      this.caps = false; // Enables to do something on Caps-Lock keypress
      $(this).next('.caps-lock-warning').hide();
    }//else else do nothing if not a letter we can use to differentiate
  });

  //Toggle warning message on Caps-Lock toggle (with some limitation)
  $(document).keydown(function(e){
    if(e.which==20){ // Caps-Lock keypress
      var pass = document.getElementById("password");
      if(typeof(pass.caps) === 'boolean'){
        //State has been set to a known value by keypress
        pass.caps = !pass.caps;
        $(pass).next('.caps-lock-warning').toggle(pass.caps);
      }
    }
  });

  //Disable on window lost focus (because we loose track of state)
  $(window).blur(function(e){
    // If window is inactive, we have no control on the caps lock toggling
    // so better to re-set state
    var pass = document.getElementById("password");
    if(typeof(pass.caps) === 'boolean'){
      pass.caps = null;
      $(pass).next('.caps-lock-warning').hide();
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="password" id="password" />
<span class="caps-lock-warning" title="Caps lock is on!">CAPS</span>

请注意,只有在按下 Caps Lock 键之前知道大写锁定的状态时,观察大写锁定切换才有用。当前大写锁定状态与密码元素上的caps JavaScript属性保持一致。当用户按下可以是大写或小写的字母时,这是我们第一次验证大写锁定状态。如果窗口失去焦点,我们就无法再观察大写锁定切换,因此我们需要重置为未知状态。

答案 9 :(得分:5)

我们使用getModifierState检查大写锁定,因为它只是鼠标或键盘事件的成员,所以我们不能使用onfocus。密码字段获得焦点的最常见的两种方法是单击或单击选项卡。我们使用onclick检查输入中是否有鼠标单击,我们使用onkeyup检测前一个输入字段中的标签。如果密码字段是页面上的唯一字段并且是自动聚焦的,则该事件在释放第一个键之前不会发生,这是可以的,但并不理想,您确实希望大写锁定工具提示在获得密码字段后显示集中精力,但在大多数情况下,此解决方案就像一个魅力。

HTML

<input type="password" id="password" onclick="checkCapsLock(event)" onkeyup="checkCapsLock(event)" />

JS

function checkCapsLock(e) {
  if (e.getModifierState("CapsLock")) {
    console.log("Caps");
  }
}

https://codepen.io/anon/pen/KxJwjq

答案 10 :(得分:3)

最近在hashcode.com上有一个similar question,我创建了一个jQuery插件来处理它。它还支持识别数字大写锁定。 (在标准德语键盘布局上,大写锁定会对数字产生影响)。

您可以在此处查看最新版本:jquery.capsChecker

答案 11 :(得分:3)

对于使用twitter bootstrap的jQuery

检查已锁定以下字符的大写字母:

大写AZ或'Ä','Ö','Ü','!',''','§','$','%','&amp;','/','('' ,')','=',':',';','*','''

小写字母a-Z或0-9或'ä','ö','ü','。',',','+','#'

/* check for CAPS LOCK on all password fields */
$("input[type='password']").keypress(function(e) {
    var kc = e.which; // get keycode

    var isUpperCase = ((kc >= 65 && kc <= 90) || (kc >= 33 && kc <= 34) || (kc >= 36 && kc <= 39) || (kc >= 40 && kc <= 42) || kc == 47 || (kc >= 58 && kc <= 59) || kc == 61 || kc == 63 || kc == 167 || kc == 196 || kc == 214 || kc == 220) ? true : false; // uppercase A-Z or 'Ä', 'Ö', 'Ü', '!', '"', '§', '$', '%', '&', '/', '(', ')', '=', ':', ';'
    var isLowerCase = ((kc >= 97 && kc <= 122) || (kc >= 48 && kc <= 57) || kc == 35 || (kc >= 43 && kc <= 44) || kc == 46 || kc == 228 || kc == 223 || kc == 246 || kc == 252) ? true : false; // lowercase a-Z or 0-9 or 'ä', 'ö', 'ü', '.', ','

    // event.shiftKey does not seem to be normalized by jQuery(?) for IE8-
    var isShift = (e.shiftKey) ? e.shiftKey : ((kc == 16) ? true : false); // shift is pressed

    // uppercase w/out shift or lowercase with shift == caps lock
    if ((isUpperCase && !isShift) || (isLowerCase && isShift)) {
        $(this).next('.form-control-feedback').show().parent().addClass('has-warning has-feedback').next(".capsWarn").show();
    } else {
        $(this).next('.form-control-feedback').hide().parent().removeClass('has-warning has-feedback').next(".capsWarn").hide();
    }
}).after('<span class="glyphicon glyphicon-warning-sign form-control-feedback" style="display:none;"></span>').parent().after("<span class='capsWarn text-danger' style='display:none;'>Is your CAPSLOCK on?</span>");

live demo on jsfiddle

答案 12 :(得分:3)

显示大写锁定状态的变量:

let isCapsLockOn = false;

document.addEventListener( 'keydown', function( event ) {
  var caps = event.getModifierState && event.getModifierState( 'CapsLock' );
  if(isCapsLockOn !== caps) isCapsLockOn = caps;
});

document.addEventListener( 'keyup', function( event ) {
  var caps = event.getModifierState && event.getModifierState( 'CapsLock' );
  if(isCapsLockOn !== caps) isCapsLockOn = caps;
});

适用于所有浏览器=&gt; canIUse

答案 13 :(得分:2)

@ user110902发布的

This jQuery-based answer对我很有用。但是,我进行了一些改进以防止@B_N的注释中提到的缺陷:在按Shift时检测CapsLock失败:

$('#example').keypress(function(e) { 
    var s = String.fromCharCode( e.which );
    if (( s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey )
    ||  ( s.toLowerCase() === s && s.toUpperCase() !== s && e.shiftKey )) {
        alert('caps is on');
    }
});

像这样,即使按Shift键也可以使用。

答案 14 :(得分:2)

无论情况如何或按下shift键,此代码都会检测大写锁定:

$('#password').keypress(function(e) { 
    var s = String.fromCharCode( e.which );
    if ( (s.toUpperCase() === s && !e.shiftKey) || 
             (s.toLowerCase() === s && e.shiftKey) ) {
        alert('caps is on');
    }
});

答案 15 :(得分:2)

我写了一个名为capsLock的库,它完全符合您的要求。

只需将其包含在您的网页上:

<script src="https://rawgit.com/aaditmshah/capsLock/master/capsLock.js"></script>

然后按如下方式使用:

alert(capsLock.status);

capsLock.observe(function (status) {
    alert(status);
});

请参阅演示:http://jsfiddle.net/3EXMd/

按Caps Lock键时状态会更新。它仅使用Shift键hack来确定Caps Lock键的正确状态。最初状态为false。所以要小心。

答案 16 :(得分:2)

另一个版本,清晰简单,处理移位的capsLock,而不是限制为ascii我认为:

document.onkeypress = function (e)
{
    e = e || window.event;
    if (e.charCode === 0 || e.ctrlKey || document.onkeypress.punctuation.indexOf(e.charCode) >= 0)
        return;
    var s = String.fromCharCode(e.charCode); // or e.keyCode for compatibility, but then have to handle MORE non-character keys
    var s2 = e.shiftKey ? s.toUpperCase() : s.toLowerCase();
    var capsLockOn = (s2 !== s);
    document.getElementById('capslockWarning').style.display = capsLockOn ? '' : 'none';
}
document.onkeypress.punctuation = [33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,91,92,93,94,95,96,123,124,125,126];

编辑:有关CapsLockOn的感觉被反转,doh,已修复。

编辑#2:在进行了更多检查后,我发现了一些更改,遗憾的是更详细的代码,但它会正确处理更多操作。

  • 使用e.charCode而不是e.keyCode并检查0值会跳过许多非字符的按键,而不会编码特定于给定语言或字符集的任何内容。根据我的理解,它的兼容性稍差,因此较旧,非主流或移动浏览器的行为可能与此代码所期望的不同,但无论如何,它的价值都是值得的。

    < / LI>
  • 检查已知标点符号列表可防止它们被视为误报,因为它们不受大写锁定的影响。如果没有这个,当您键入任何标点符号时,大写锁定指示符将被隐藏。通过指定排除的集合而不是包含的集合,它应该与扩展的字符更兼容。这是最丑陋,最特殊的一点,非西方语言有一些机会有不同的标点符号和/或标点符号是一个问题,但它再次值得IMO,至少对于我的情况。

答案 17 :(得分:2)

<强>阵营

onKeyPress(event) { 
        let self = this;
        self.setState({
            capsLock: isCapsLockOn(self, event)
        });
    }

    onKeyUp(event) { 
        let self = this;
        let key = event.key;
        if( key === 'Shift') {
            self.shift = false;
        }
    }
    <div>
     <input name={this.props.name} onKeyDown={(e)=>this.onKeyPress(e)} onKeyUp={(e)=>this.onKeyUp(e)} onChange={this.props.onChange}/>
                {this.capsLockAlert()}
</div>
function isCapsLockOn(component, event) {
        let key = event.key;
        let keyCode = event.keyCode;

        component.lastKeyPressed = key;

        if( key === 'Shift') {
            component.shift = true;
        } 

        if (key === 'CapsLock') {
            let newCapsLockState = !component.state.capsLock;
            component.caps = newCapsLockState;
            return newCapsLockState;
        } else {
            if ((component.lastKeyPressed !== 'Shift' && (key === key.toUpperCase() && (keyCode >= 65 && keyCode <= 90)) && !component.shift) || component.caps ) {
                component.caps = true;
                return true;
            } else {
                component.caps = false;
                return false;
            }
        }
    }

答案 18 :(得分:1)

上面的

Mottie'sDiego Vieira's response就是我们最终使用的内容,应该是现在接受的答案。但是,在我注意到它之前,我写了一个不依赖于字符代码的小javascript函数......

var capsLockIsOnKeyDown = {shiftWasDownDuringLastChar: false,
  capsLockIsOnKeyDown: function(event) {
    var eventWasShiftKeyDown = event.which === 16;
    var capsLockIsOn = false;
    var shifton = false;
    if (event.shiftKey) {
        shifton = event.shiftKey;
    } else if (event.modifiers) {
        shifton = !!(event.modifiers & 4);
    }

    if (event.target.value.length > 0 && !eventWasShiftKeyDown) {
      var lastChar = event.target.value[event.target.value.length-1];
      var isAlpha = /^[a-zA-Z]/.test(lastChar);

      if (isAlpha) {
        if (lastChar.toUpperCase() === lastChar && lastChar.toLowerCase() !== lastChar
          && !event.shiftKey && !capsLockIsOnKeyDown.shiftWasDownDuringLastChar) {
          capsLockIsOn =  true;
        }
      }
    }
    capsLockIsOnKeyDown.shiftWasDownDuringLastChar = shifton;
    return capsLockIsOn;
  }
}

然后在事件处理程序中调用它,如capsLockIsOnKeyDown.capsLockIsOnKeyDown(event)

但同样,我们最终只使用了@Mottie和@Diego Vieira的回复

答案 19 :(得分:1)

基于@joshuahedlund的答案,因为它对我来说很好。

我使代码成为一个函数,因此可以重用它,并在我的情况下将它链接到正文。只有您愿意,才可以将其链接到密码字段。

<html>
<head>
<script language="javascript" type="text/javascript" >
function checkCapsLock(e, divId) { 
    if(e){
        e = e;
    } else {
        e = window.event;
    }
    var s = String.fromCharCode( e.which );
    if ((s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey)|| //caps is on
      (s.toUpperCase() !== s && s.toLowerCase() === s && e.shiftKey)) {
        $(divId).style.display='block';
    } else if ((s.toLowerCase() === s && s.toUpperCase() !== s && !e.shiftKey)||
      (s.toLowerCase() !== s && s.toUpperCase() === s && e.shiftKey)) { //caps is off
        $(divId).style.display='none';
   } //else upper and lower are both same (i.e. not alpha key - so do not hide message if already on but do not turn on if alpha keys not hit yet)
 }
</script>
<style>    
.errorDiv {
    display: none;
    font-size: 12px;
    color: red;
    word-wrap: break-word;
    text-overflow: clip;
    max-width: 200px;
    font-weight: normal;
}
</style>
</head>
<body  onkeypress="checkCapsLock(event, 'CapsWarn');" >
...
<input name="password" id="password" type="password" autocomplete="off">
<div id="CapsWarn" class="errorDiv">Capslock is ON !</div>
...
</body>
</html>

答案 20 :(得分:0)

我知道太晚了,但是这对其他人可能会有帮助。

这是我最简单的解决方案(使用土耳其字符);

function (s,e)
{
    var key = e.htmlEvent.key;

    var upperCases = 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZXWQ';
    var lowerCases = 'abcçdefgğhıijklmnoöprsştuüvyzxwq';
    var digits = '0123456789';

    if (upperCases.includes(key))
    {
        document.getElementById('spanLetterCase').innerText = '[A]';
    }

    else if (lowerCases.includes(key))
    {
        document.getElementById('spanLetterCase').innerText = '[a]';
    }

    else if (digits.includes(key))
    {
        document.getElementById('spanLetterCase').innerText = '[1]';
    }

    else
    {
        document.getElementById('spanLetterCase').innerText = '';
    }
}

答案 21 :(得分:0)

因此,我找到了此页面,但我并不真正喜欢我找到的解决方案,因此我找出了解决方案,并将其提供给所有人。对我来说,只有在我输入字母时大写锁定处于打开状态才重要。这段代码为我解决了这个问题。它快速简便,可为您提供capsIsOn变量以供您在需要时引用。

let capsIsOn=false;
let capsChecked=false;

let capsCheck=(e)=>{
    let letter=e.key;
    if(letter.length===1 && letter.match(/[A-Za-z]/)){
        if(letter!==letter.toLowerCase()){
          capsIsOn=true;
          console.log('caps is on');
        }else{
          console.log('caps is off');
        }
        capsChecked=true;
        window.removeEventListener("keyup",capsCheck);
    }else{
      console.log("not a letter, not capsCheck was performed");
    }

}

window.addEventListener("keyup",capsCheck);

window.addEventListener("keyup",(e)=>{
  if(capsChecked && e.keyCode===20){
    capsIsOn=!capsIsOn;
  }
});

答案 22 :(得分:0)

Javascript代码

<script type="text/javascript">
   function isCapLockOn(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('alert').style.visibility = 'visible';
   else
       document.getElementById('alert').style.visibility = 'hidden';
   }
</script>

我们现在需要使用Html

关联此脚本
<input type="password" name="txtPassword" onkeypress="isCapLockOn(event)" />
<div id="alert" style="visibility:hidden">Caps Lock is on.</div> 

答案 23 :(得分:0)

这是一个自定义jquery插件,使用jquery ui,由此页面上的所有好主意组成,并利用工具提示小部件。大写锁定消息自动应用所有密码框,不需要更改当前的html。

自定义插件代码......

(function ($) {
    $.fn.capsLockAlert = function () {
        return this.each(function () {
            var capsLockOn = false;
            var t = $(this);
            var updateStatus = function () {
                if (capsLockOn) {
                    t.tooltip('open');
                } else {
                    t.tooltip('close');
                }
            }
            t.tooltip({
                items: "input",
                position: { my: "left top", at: "left bottom+10" },
                open: function (event, ui) {
                    ui.tooltip.css({ "min-width": "100px", "white-space": "nowrap" }).addClass('ui-state-error');
                    if (!capsLockOn) t.tooltip('close');
                },
                content: function () {
                    return $('<p style="white-space: nowrap;"/>')
                        .append($('<span class="ui-icon ui-icon-alert" style="display: inline-block; margin-right: 5px; vertical-align: text-top;" />'))
                        .append('Caps Lock On');
                }
            })
            .off("mouseover mouseout")
            .keydown(function (e) {
                if (e.keyCode !== 20) return;
                capsLockOn = !capsLockOn;
                updateStatus();
            })
            .keypress(function (e) {
                var kc = e.which; //get keycode

                var isUp = (kc >= 65 && kc <= 90) ? true : false; // uppercase
                var isLow = (kc >= 97 && kc <= 122) ? true : false; // lowercase
                if (!isUp && !isLow) return; //This isn't a character effected by caps lock

                // event.shiftKey does not seem to be normalized by jQuery(?) for IE8-
                var isShift = (e.shiftKey) ? e.shiftKey : ((kc === 16) ? true : false); // shift is pressed

                // uppercase w/out shift or lowercase with shift == caps lock
                if ((isUp && !isShift) || (isLow && isShift)) {
                    capsLockOn = true;
                } else {
                    capsLockOn = false;
                }
                updateStatus();
            });
        });
    };
})(jQuery);

适用于所有密码元素......

$(function () {
    $(":password").capsLockAlert();
});

答案 24 :(得分:0)

您可以使用this script。即使按下Shift键,它也应该在Windows上运行良好,但如果是这样的话,它将无法在Mac OS上运行。

答案 25 :(得分:0)

尝试使用此代码。

$('selectorOnTheInputTextBox').keypress(function (e) {
        var charCode = e.target.value.charCodeAt(e.target.value.length - 1)
        var capsOn = 
            e.keyCode && 
            !e.shiftKey &&
            !e.ctrlKey &&
            charCode >= 65 && 
            charCode <= 90;

            if (capsOn) 
               //action if true
            else
               //action if false
});

祝你好运:)

答案 26 :(得分:0)

以易于理解的方式尝试这个简单的代码

这是脚本

 <script 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>

和Html

<input type="password" name="txtPassword" onkeypress="capLock(event)" />
 <div id="divMayus" style="visibility:hidden">Caps Lock is on.</div> 

答案 27 :(得分:0)

在下面的代码中,当大写锁定时它将显示警告,并且他们使用shift按键。

如果我们返回false;那么当前的char不会附加到文本页面。

$('#password').keypress(function(e) { 
    // e.keyCode is not work in FF, SO, it will
    // automatically get the value of e.which.  
    var s = String.fromCharCode( e.keyCode || e.which );
    if ( s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey ) {
            alert('caps is on');
            return false;
    }
else  if ( s.toUpperCase() !== s) {
            alert('caps is on and Shiftkey pressed');
            return false;
    }
});

答案 28 :(得分:-1)

有一种更简单的检测大写锁定的解决方案:

function isCapsLockOn(event) {
    var s = String.fromCharCode(event.which);
    if (s.toUpperCase() === s && s.toLowerCase() !== s && !event.shiftKey) {
        return true;
    }
}

答案 29 :(得分:-1)

键入时,如果启用了caplock,它可以自动将当前char转换为小写。这样即使caplocks打开,它也不会像当前页面上那样表现。要通知您的用户,您可以显示一个文本,说明已启用caplocks,但转换了表单条目。

答案 30 :(得分:-7)

jQuery中:

$('some_element').keypress(function(e){
       if(e.keyCode == 20){
             //caps lock was pressed
       }
});

This jQuery plugincode)更简洁地实现与Rajesh's answer相同的想法。