2009-12-29 3 views
0

Je me demandais si quelqu'un pouvait m'aider à nettoyer ce code si possible; y compris la fusion des deux fonctions en une seule. Je suis nouveau sur javascript, donc je pourrais vraiment utiliser de l'aide.Nettoyage du script Caps Lock

J'ai été capable de faire fonctionner ce script plutôt bien, je veux juste savoir s'il peut être affiné et/ou s'il y a des problèmes que j'ai oubliés.

Le script détermine d'abord si le verrouillage des majuscules est activé ou désactivé en fonction des pressions de touche. Une fois que l'état de verrouillage des majuscules est déterminé, appuyez sur la touche de verrouillage des majuscules pour activer ou désactiver le message d'avertissement de verrouillage des majuscules.

Merci,

Jeff

<script language="javascript"> 

//Caps Lock Warning 
var onOff = ""; 
function capLock(e){ 
var kc = e.keyCode?e.keyCode:e.which; 
var sk = e.shiftKey?e.shiftKey:((kc == 16)?true:false); 
var cl = document.getElementById('cl'); 

if(onOff == ""){ 

//Checks if caps lock is on. 
if(((kc >= 65 && kc <= 90) && !sk)||((kc >= 97 && kc <= 122) && sk)) 
{ 
cl.style.visibility = 'visible'; 
onOff = "on"; 
} 
//Checks if caps lock is off.  
else if(((kc >= 65 && kc <= 90) && sk)||((kc >= 97 && kc <= 122) && !sk)) 
{ 
cl.style.visibility = 'hidden'; 
onOff = "off"; 
} 
else 
{ 
cl.style.visibility = 'hidden'; 
} 
} 
}; 

//Hides/shows Caps Lock warning when Caps Lock key is pressed once Caps Lock 
//state is determined. 
function hideMsg(e){ 
var cl = document.getElementById('cl');  
var KeyID = (window.event) ? event.keyCode : e.keyCode; 

if(KeyID==20 && onOff == "on") 
{ 
cl.style.visibility = 'hidden'; 
onOff = "off"; 
} 
else if(KeyID==20 && onOff == "off") 
{ 
cl.style.visibility = 'visible'; 
onOff = "on"; 
} 
} 
document.onkeydown=hideMsg 

</script> 


<body OnLoad="document.form1.tb1.focus();"> 
<form name="form1"> 
<input name="tb1" onkeypress="capLock(event)" type="text" onLoad="javascript:this.focus" /><p /> 
<input name="tb2" onkeypress="capLock(event)" type="password" /><p /> 
<input id="Reset1" type="reset" value="reset" /><p /> 
<span id="cl" class="hint" style="visibility:hidden;">Caps Lock is On! 
<p>Having Caps Lock on may cause you to enter your password incorrectly.</p> 
<p>You should press Caps Lock to turn it off before entering your password.<p/> 
</span> 
</form> 
</body> 
+2

petit point: '((kc == 16)? True: false)' - ceci pourrait être remplacé par '(kc == 16)' – nickf

+0

Merci pour l'info. J'ai mis à jour le script avec votre recommandation. – Jeff

Répondre

1

Je pense à une nouvelle écriture ...

Mais d'abord, comment détectez-vous si CapsLock est?

Vous pouvez inspectez les touches enfoncées, et il sera sur les cas suivants:

  • La touche enfoncée est en majuscules, et le décalage est pas pressé, ou
  • Le Ket pressé est minuscule, et le décalage est pressé

Quelque chose de simple comme ça fonctionnerait:

(function() { 
    var hint = document.getElementById('cl'); 

    var keypressHandler = function (e) { 
    e = e || window.event; 
    var keyCode = e.keyCode || e.which, 
    character = String.fromCharCode(keyCode), 
    isLetter = /[a-z]/i.test(character), 
    capsLockOn = isLetter && (character === character.toUpperCase() && !e.shiftKey) || 
    // Case 1: capslock on, without shift pressed 
       (character === character.toLowerCase() && e.shiftKey); 
    // Case 2: capslock on, with shift pressed 

    hint.style.display = capsLockOn ? '' : 'none'; // show or hide the 'hint' 
    } 

    // Bind keypress event to both inputs: 
    document.getElementById('tb1').onkeypress = 
    document.getElementById('tb2').onkeypress = keypressHandler; 
})(); 

Cochez un exemple du code ci-dessus avec votre balisage here.

+0

Le vôtre est une autre façon de faire le même contrôle que mon script. Vérifie les codes clés et si la touche Maj a été enfoncée. La mine effectue également une vérification inverse (le verrouillage de la capsule est-il activé?) Elle utilise cette information d'activation/de désactivation pour basculer en mode d'avertissement lorsque la touche de verrouillage est enfoncée. Le vôtre n'inclut pas cette fonctionnalité. De cette façon, le message est affiché/masqué immédiatement après une touche de verrouillage. Exécutez mon code, tapez une lettre, puis appuyez sur Verrouillage. Le message apparaîtra ou se fermera instantanément. Avec le vôtre, le message ne s'affiche qu'après avoir appuyé d'abord sur la touche de verrouillage, puis en tapant une lettre. Mineur je sais, mais c'est ce que je cherche. Jeff – Jeff