UPDATE
J'ai corrigé le code qui avait une erreur et ajouté une variable appelée clé pour enregistrer le code de la touche enfoncée en utilisant keyCode y dont qui dépendent du navigateur.
var key = e.which || e.keyCode;
Merci Donald.McLean :)
Si vous voulez vérifier si vous écrivez des chiffres en tapant (et éviter d'écrire d'autres caractères dans votre champ de saisie), vous pouvez utiliser cette fonction simple et vous pouvez définir les éléments autorisés (cela inclut tout ce que vous voulez filtrer). De cette façon, vous pouvez choisir non seulement des nombres entiers, mais par exemple un certain groupe de caractères. L'exemple est basé sur jQuery pour l'attacher à un champ de saisie.
$('#myInputField').keypress(function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) && // Interval of values (0-9)
(key !== 8) && // Backspace
(key !== 9) && // Horizontal tab
(key !== 37) && // Percentage
(key !== 39) && // Single quotes (')
(key !== 46)) // Dot
{
e.preventDefault();
return false;
}
});
Si vous utilisez une autre clé que celle définie, elle n'apparaîtra pas dans le champ. Et parce qu'Angular.js devient fort ces jours-ci, voici la directive que vous pouvez créer pour faire cela dans n'importe quel champ de votre application web :
myApp.directive('integer', function()
{
return function (scope, element, attrs)
{
element.bind('keydown', function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) && // Interval (0-9)
(key !== 8) && // Backspace
(key !== 9) && // Horizontal tab
(key !== 37) && // Percentage
(key !== 39) && // Single quotes (')
(key !== 46)) // Dot
{
e.preventDefault();
return false;
}
});
}
});
Mais que se passe-t-il si vous voulez utiliser ng-repeat
et vous devez appliquer cette directive uniquement dans un certain nombre de domaines. Eh bien, vous pouvez transformer la directive supérieure en une directive prête à admettre une vrai o faux afin de pouvoir décider quel champ sera affecté par elle.
myApp.directive('rsInteger', function() {
return {
restrict: 'A',
link: function (scope, element, attrs) {
if (attrs.rsInteger === 'true') {
element.bind('keydown', function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) && // Interval (0-9)
(key !== 8) && // Backspace
(key !== 9) && // Horizontal tab
(key !== 37) && // Percentage
(key !== 39) && // Single quotes (')
(key !== 46)) // Dot
{
e.preventDefault();
return false;
}
});
}
}
}
});
Pour utiliser cette nouvelle directive, il suffit de le faire dans un texte de type input comme ceci, par exemple :
<input type="text" rs-integer="true">
J'espère que cela vous aidera.