如何使用JavaScript检测页面加载(即,不是按键)上的大写锁定状态?
所以我一直在研究使用JavaScript/jQuery的表单大写锁定检测解决方案。stackoverflow上有一个巨大的线程提供了许多解决方案。但唯一的问题是他们没有检查Caps Lock本身是否被直接按下。它们检测是否输入了大写字母以及是否未按下shift键。这样做的缺点是,在用户开始输入表单之前,我的Caps Lock警告消息不会打开/关闭,这很难达到最佳效果。这是我的密码如何使用JavaScript检测页面加载(即,不是按键)上的大写锁定状态?,javascript,forms,capslock,Javascript,Forms,Capslock,所以我一直在研究使用JavaScript/jQuery的表单大写锁定检测解决方案。stackoverflow上有一个巨大的线程提供了许多解决方案。但唯一的问题是他们没有检查Caps Lock本身是否被直接按下。它们检测是否输入了大写字母以及是否未按下shift键。这样做的缺点是,在用户开始输入表单之前,我的Caps Lock警告消息不会打开/关闭,这很难达到最佳效果。这是我的密码 document.onkeypress = function(e){ e = e || window.eve
document.onkeypress = function(e){
e = e || window.event;
var s = String.fromCharCode(e.keyCode || e.which);
if (s.toUpperCase() === s && !e shiftKey) {
capsWarning.style.visibility = 'visible';
} else {
capsWarning.style.visibility = 'hidden';
}
}
有没有更好的方法,当我按下caps lock键时,用JavaScript触发caps lock消息?也就是说,在我开始输入之前,不要延迟切换消息
与JQuery相比,我更喜欢纯JavaScript解决方案。尽管如果您认为jQuery在这里非常好,请说明原因,我可以向我的同事施压,让我将其包括在这里;o使用
onkeydown
处理程序:
document.onkeypress=function(){console.log(arguments);}
我使用了这段代码并尝试分派一个事件。
getModifierState
不会返回false以外的值。这样,实际上你将发送一个字符,它是“a”或“a”。无论哪种情况,它都将被硬编码
getModifierState
仅在实际按键的情况下返回true
但是在IE 11中有一个自动CapsLock检测(对于
)
我在chrome上测试了这个,它成功了,把这个JavaScript放在标签里
function loadcaps ( e ) {
e = e || window.event;
var s = String.fromCharCode( e.keyCode || e.which );
if ( s.toUpperCase() === s && !e.shiftKey ) {
capsWarning.style.visibility = 'visible';
} else {
capsWarning.style.visibility = 'hidden';
}
}
把它贴在你的标签上
<body onload="loadcaps()">
让我知道它是否适合您。使用以下提及代码:
<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('divon').style.visibility = 'visible';
document.getElementById('divoff').style.visibility = 'hidden';
}else{
document.getElementById('divon').style.visibility = 'hidden';
document.getElementById('divoff').style.visibility = 'visible';
}
}
</script>
<input type="text" name="trackcaps" onkeypress="capLock(event)" />
<div id="divon" style="visibility:hidden">Caps Lock is on.</div>`enter code here`
<div id="divoff" style="visibility:hidden">Caps Lock is off.</div>
功能盖锁(e){
kc=e.keyCode?e.keyCode:e.which;
sk=e.shiftKey?e.shiftKey:((kc==16)?真:假);
如果(((kc>=65&&kc=97&&kc请重新阅读该问题。它询问如何在不等待按键的情况下执行此操作。我将onkeypress替换为onkeydown。在键入任何内容之前,当我按caps键时,会显示我的caps lock消息。但当我再次按caps时,关闭它,消息仍然存在;o@Quentin那是不可能的,我是在说问题的这一部分:是否有更好的方法,当我按下caps lock键时,我可以使用JavaScript触发caps lock消息?
lel。实际上,现在无论我按下什么键,caps lock消息都会显示:s@Quentin.不Kenney是对的。至少必须按下Caps Lock。我想知道JavaScript是否可以检测到这一点必须在输入字段中键入。“有没有更好的方法,当我按下caps lock键时,我可以用JavaScript触发caps lock消息?也就是说,在我开始键入之前,不要延迟切换消息[即,例如键入密码]”如果不清楚,很抱歉。有一些场景没有涵盖:如果在加载页面之前caps lock处于活动状态怎么办?好的,在按下一个键之前,不可能获取键盘状态。我的意思是,在我开始在输入字段中键入密码之前,我希望JavaScript检测caps lock是否处于打开状态。因此,是的,必须按下一个键。R现在,用户只有在开始键入登录详细信息后才能知道Caps Lock是否打开。这不是最佳选择。抱歉,这有点混乱。现代浏览器在事件对象中有方法。如果不必支持旧浏览器,可以使用该方法。虽然这也需要一个事件,但您可以通过自己触发事件来实现?Co您能给出一个使用getModifierState()的更详细示例吗Teemu?@Gaweyne。令人遗憾的是,似乎只有MouseeEvents和KeyboardEvents具有getModifierState方法。对于您的任务来说,一个好的事件应该是onfocus
,但它的事件对象没有上述方法。而且,如果您通过JS触发一个keydown方法,那么getModifierState()总是会得到false
(请参见链接小提琴的第一个版本)。
<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('divon').style.visibility = 'visible';
document.getElementById('divoff').style.visibility = 'hidden';
}else{
document.getElementById('divon').style.visibility = 'hidden';
document.getElementById('divoff').style.visibility = 'visible';
}
}
</script>
<input type="text" name="trackcaps" onkeypress="capLock(event)" />
<div id="divon" style="visibility:hidden">Caps Lock is on.</div>`enter code here`
<div id="divoff" style="visibility:hidden">Caps Lock is off.</div>