2017-07-26 5 views
4

Je veux autoriser une entrée telle que 1:10, mais pas 1; 10. Cependant,: et; les deux correspondent à keyCode 186, donc en utilisant keyCode pour empêcher le; clé de la saisie dans mon champ de saisie ne fonctionne pas. J'ai également fait des recherches sur l'utilisation de charCodes, mais les charCodes n'ont pas; ou: valeurs. Enfin, j'ai regardé les tables ascii. Ils ont des points-virgules et deux points. Est-il possible pour moi d'utiliser éventuellement des tables ascii pour empêcher le; clé de la saisie dans ma zone de texte, mais la: clé à autoriser? Ou y a-t-il une autre approche qui me permettra de faire cela? J'ai également pensé à détecter deux entrées clés dans une rangée, de sorte que je puisse détecter une entrée de clé de décalage, mais cela semble être une solution sale.Comment empêcher la saisie d'un point-virgule dans la saisie de texte html, mais en autorisant un deux-points?

$("input.form-1").bind({ 
    keydown: function(e) { 
     if(e.which ===186) { //trying to disallow semicolons, which also disallows colons 
      return false; 
     } 
    } 
}); 
+1

essayer de vérifier le 'shiftKey' est en panne ou non –

+0

Ils correspondent à la fois keyCode 186 sur un clavier US-International ou US-anglais. Il y a beaucoup d'autres dispositions de clavier là-bas. Ceux-ci ne fonctionneront probablement pas correctement avec cette approche. –

Répondre

4

Comme l'a dit Rory, vous devrait utiliser on. Au lieu de vérifier shiftKey, vous pouvez également vérifier la propriété key sur l'événement. MDN KeyboardEvent.key

$("input.form-1").on({ 
 
    keydown: function(e) { 
 
     if(e.key === ";") { // disallow semicolon 
 
      return false; 
 
     } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input class="form-1" type="text" />

2

Premièrement, n'utilisez pas bind(). Il a été déprécié un long il y a longtemps. Utilisez plutôt on().

Pour résoudre votre problème, vous devez détecter si le shift touche est maintenue enfoncée, pour lequel vous pouvez utiliser la propriété shiftKey de l'événement:

$("input.form-1").on({ 
 
    keydown: function(e) { 
 
    if (!e.shiftKey && e.which === 186) { 
 
     return false; 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input class="form-1" type="text" />

+0

Je pense que ce sera '! E.shiftKey' car': 'viendra quand' shiftKey' sera en panne, ce qu'il veut autoriser! –

+0

Vous avez raison, merci. –

+1

Je suppose que cela suppose un clavier querty-ish classique. Le point-virgule et le colon sont-ils toujours les mêmes frappes dans tous les pays? –

1

Vous essayez juste e.keycode le code d'activation pour : 58 et 59. ; si vous voulez une keycode pour la lettre ou symboles vous tapez dans le texte ci-dessous le code de mention.

<html> 
 
<body> 
 

 
<input type="text" size="40" onkeypress="myFunction(event)"> 
 

 
<p id="demo"></p> 
 
<script> 
 
function myFunction(event) { 
 
    var x = event.keyCode; 
 
    document.getElementById("demo").innerHTML = x; 
 
} 
 
</script> 
 

 

 
</body> 
 
</html>

+0

Notez que keyCode est différent ici car vous utilisez un attribut d'événement obsolète 'on *' - ce qui est une mauvaise idée en soi. Dans un gestionnaire discret ou jQuery, le code clé est 186 (https: // jsfiddle.net/5u8czo29 /) comme OP correctement utilisé –

+0

Existe-t-il plusieurs définitions de keyCode pour chaque type de gestionnaire d'événements? Je vois certaines personnes utilisant 59 comme code clé pour; et d'autres utilisant 186 –

0

Vérifiez le code d'activation et touche aussi bien si l'état.

$("input.form-1").on({ 
    keydown: function(e) { 
     if(e.key === ";") { // disallow semicolon 
      return false; 
     } 
    } 
}); 
+0

Pourquoi vérifier les deux? Vous ne croyez pas 'e.key ==="; "'? –

+0

Oui, vous avez raison 'e.key ==="; "' est suffisant :) –