Solución:
En jQuery,
$('#example').keypress(function(e) {
var s = String.fromCharCode( e.which );
if ( s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey ) {
alert('caps is on');
}
});
Evite el error, como la tecla de retroceso, s.toLowerCase() !== s
es necesario.
Puedes usar un KeyboardEvent
para detectar numerosas teclas, incluido el bloqueo de mayúsculas en los navegadores más recientes.
los getModifierState
La función proporcionará el estado para:
- Alt
- AltGraph
- Bloq Mayús
- Control
- Fn (Android)
- Meta
- Num lock
- SO (Windows y Linux)
- ScrollLock
- Cambio
Esta demostración funciona en todos los navegadores principales, incluido el móvil (caniuse).
passwordField.addEventListener( 'keydown', function( event ) {
var caps = event.getModifierState && event.getModifierState( 'CapsLock' );
console.log( caps ); // true when you press the keyboard CapsLock key
});
Puedes intentarlo .. Se agregó un ejemplo de trabajo. Cuando el foco está en la entrada, activar el bloqueo de mayúsculas hace que el LED se vuelva rojo, de lo contrario, verde. (No lo he probado en mac / linux)
NOTA: Ambas versiones me funcionan. Gracias por las aportaciones constructivas en los comentarios.
VERSIÓN ANTIGUA: https://jsbin.com/mahenes/edit?js,output
Además, aquí hay una versión modificada (¿alguien puede probar en mac y confirmar)
NUEVA VERSIÓN: https://jsbin.com/xiconuv/edit?js,output
NUEVA VERSIÓN:
function isCapslock(e) {
const IS_MAC = /Mac/.test(navigator.platform);
const charCode = e.charCode;
const shiftKey = e.shiftKey;
if (charCode >= 97 && charCode <= 122) {
capsLock = shiftKey;
} else if (charCode >= 65 && charCode <= 90
&& !(shiftKey && IS_MAC)) {
capsLock = !shiftKey;
}
return capsLock;
}
VERSIÓN ANTIGUA:
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;
}
Para caracteres internacionales, se puede agregar una verificación adicional para las siguientes teclas según sea necesario. Debe obtener el rango de código de clave para los caracteres que le interesan, puede ser mediante el uso de una matriz de mapeo de teclas que contendrá todas las claves de casos de uso válidas a las que se dirige …
mayúscula AZ o ‘Ä’, ‘Ö’, ‘Ü’, minúscula aZ o 0-9 o ‘ä’, ‘ö’, ‘ü’
Las claves anteriores son solo una representación de muestra.