2009-06-01 13 views
13

Mi chiedevo se fosse possibile sapere se il pulsante Bloc Maiusc è attivo durante il riempimento di un modulo Web?E 'possibile controllare se il pulsante di blocco maiusc è attivo mentre si digita il modulo?

A volte, quando ti viene chiesto di inserire la password, i software ti avvisano che è attivo e fai attenzione.

Mi sarebbe piaciuto fare lo stesso nei moduli web.

Qualche idea?

+1

possibile duplicato di [Come fa a sapere se si bloccano le protezioni sta usando JavaScript?] (http://stackoverflow.com/questions/348792/how-do-you-tell-if-caps-lock-is-on-using-javascript) – sg3s

risposta

-1

L'accesso alle impostazioni utente sarebbe contrario a qualsiasi modello di sicurezza decente, tuttavia è possibile verificare se l'utente ha inserito ALL_CAPS o aLL_CAPS e avvisare in modo appropriato.

Un elegante work-around può essere trovato qui: http://24ways.org/2007/capturing-caps-lock

Purtroppo, non c'è modo di rilevare se effettivamente Caps Lock è attivo direttamente. Tuttavia, c'è un semplice work-around; se l'utente preme un tasto, ed è una lettera maiuscola, e non hanno il tasto Shift premuto, perché allora devono avere il Blocco maiuscole! Semplice.

+1

Penso definitivamente che analizzi l'input dell'utente come quello sarebbe una cattiva idea! la mia password potrebbe essere FOOBAR e non voglio essere notato! Non dovrebbe disabilitare l'input all'utente, ma semplicemente notarlo, cioè il blocco maiuscole è attivo. –

+0

La modifica introduce una buona idea per controllarla –

+0

Sì, rilevare il tasto Maiusc non il blocco maiuscole - semplice e intelligente! – Pool

0

provare

<html> 
<head> 
<script type="text/javascript"> 
function checar_caps_lock(ev) { 
    var e 

    = ev || window.event; 
     codigo_tecla = e.keyCode?e.keyCode:e.which; 
     tecla_shift = e.shiftKey?e.shiftKey:((codigo_tecla == 16)?true:false); 
     if(((codigo_tecla >= 65 && codigo_tecla <= 90) && !tecla_shift) || ((codigo_tecla >= 97 && codigo_tecla <= 122) && tecla_shift)) { 
      document.getElementById('aviso_caps_lock').style.visibility = 'visible'; 
     } 
     else { 
      document.getElementById('aviso_caps_lock').style.visibility = 'hidden'; 
     } 
    } 
    </script> 
    </head> 
    <body> 
    <form> 
    <input name="nome_do_campo" type="text" onkeypress="checar_caps_lock(event)" /> 
    <div id="aviso_caps_lock" style="visibility: hidden">CAPS LOCK ATIVADO</div> 
    </form> 

</body> 
</html> 
1

Il seguente frammento di jQuery rileva se il blocco delle maiuscole è attivata su pressione del tasto:

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

Tratto da StackOverflow risposta: https://stackoverflow.com/a/896515/1113435

+0

Questa sembra essere una soluzione piuttosto solida. jsFiddle qui: http://jsfiddle.net/p25sq/ –

+0

Si noti che questa soluzione funziona solo con la pressione di un tasto, ma quando si utilizza keydown o keyup, String.fromCharCode() restituisce sempre la lettera maiuscola. – user5513314

0

È interessante notare che questo solo funziona con keypress e non con keyup e keydown. Giusto per sapere, in questo modo:

$("#example").keypress(function(e) { 
    console.log("keypress: " + e.which); 
}); 
$("#example").keydown(function(e) { 
    console.log("keydown: " + e.which); 
}); 
$("#example").keyup(function(e) { 
    console.log("keyup: " + e.which); 
}); 

("a" premuto) restituisce questo:

keydown: 65 
keypress: 97 
keyup: 65 

Nota: provato con Chrome e Firefox

Problemi correlati