Lorsque je donne le numéro de type de saisie, la lettre e
et les caractères spéciaux sont également affichés dans le champ de saisie. Je veux afficher uniquement les chiffres. Comment les bloquer?
<input type="number">
Essayez d'empêcher le comportement par défaut si vous n'aimez pas la valeur de clé entrante:
document.querySelector(".your_class").addEventListener("keypress", function (evt) {
if (evt.which != 8 && evt.which != 0 && evt.which < 48 || evt.which > 57)
{
evt.preventDefault();
}
});
// 0 for null values
// 8 for backspace
// 48-57 for 0-9 numbers
<input type="number" class="your_class">
Vous pouvez bloquer la saisie de ces caractères avec l'événement keydown
var inputBox = document.getElementById("inputBox");
var invalidChars = [
"-",
"+",
"e",
];
inputBox.addEventListener("keydown", function(e) {
if (invalidChars.includes(e.key)) {
e.preventDefault();
}
});
<input type="number" id="inputBox" />
mais l'utilisateur peut toujours les saisir s'il fait un copier/coller (ou via la console). Pour empêcher le copier/coller, vous pouvez effectuer un remplacement sur la valeur entrée [*].
var inputBox = document.getElementById("inputBox");
var invalidChars = [
"-",
"+",
"e",
];
inputBox.addEventListener("input", function() {
this.value = this.value.replace(/[e\+\-]/gi, "");
});
inputBox.addEventListener("keydown", function(e) {
if (invalidChars.includes(e.key)) {
e.preventDefault();
}
});
<input type="number" id="inputBox" />
* Vous ne pouvez pas vraiment obtenir la valeur entrée sur un champ de saisie avec le type défini sur nombre. Vous pouvez obtenir la valeur entrée tant qu’il s’agit d’un nombre, c’est-à-dire que la valeur passe le contrôle du nombre interne. Si l'utilisateur copie/colle 1e
, la solution proposée échouera.
Qu'est-ce qui se passe lorsque vous entrez 1e
est que, champ de saisie vérifie si c'est un nombre, et si ce n'est pas (1e
n'est pas), il envoie un avertissement:
La valeur spécifiée "1e" n'est pas un nombre valide. La valeur doit correspondre à l'expression régulière suivante: -? (\ D + |\d +.\D + |.\D +) ([eE] [- +]?\D +)?
et la propriété value
est définie sur ""
.
Si vous vérifiez les propriétés du champ, vous trouverez la propriété valueAsNumber
. Si la valeur entrée est un nombre, le champ de saisie analyse la valeur et la stocke dans valueAsNumber
. Puisque 1e
n'est pas un nombre, il vaut NaN
, et NaN
est attribué à valueAsNumber
et value
est défini sur ""
. Bien que vous voyiez toujours 1e
dans le champ de saisie.
J'ai posé une question liée à ce problème, mais pas encore de solution.
Récupère la valeur entrée dans le champ de saisie du numéro, pas celle analysée
Vous pouvez le faire facilement en utilisant jQuery
Essayez ce code
$(function() {
$("#input").keypress(function(event) {
if (event.which != 8 && event.which != 0 && (event.which < 48 || event.which > 57)) {
$(".alert").html("Enter only digits!").show().fadeOut(2000);
return false;
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" id="input" />
<div class="alert"></div>
Au lieu d'essayer de bloquer des valeurs, vous pouvez essayer de remplacer des valeurs qui ne sont pas numériques.
Si vous choisissez de gérer les codes clés, vous devrez gérer numKeys
, numPad
, shift +
, crtl +
etc. et essayer d'actualiser alors que le focus est dans le champ de texte échouera également. Prevent Default empêchera beaucoup plus que des valeurs incorrectes.
$("#input").on("input", function() {
var nonNumReg = /[^0-9]/g
$(this).val($(this).val().replace(nonNumReg, ''));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="tel" id="input" />
<div class="alert"></div>
$("#input").on("input", function() {
var nonNumReg = /[^0-9]/g
$(this).val($(this).val().replace(nonNumReg, ''));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="tel" id="input" />
<div class="alert"></div>
Puisque la question d'OP était marquée avec 'angularjs', la solution la plus propre serait probablement d'utiliser une directive. Plusieurs solutions pour cette approche ont déjà été expliquées ici:
angularjs: autorise uniquement la saisie de nombres dans une zone de texte
Suivant la forme des réponses ci-dessus, la plupart des exemples ci-dessus le couvrent, je viens de remarquer que, lorsque vous saisissez "E", cela est toujours admissible, je pense donc que le mieux est de l’ajouter dans la matrice. J'utilise Jquery 3.3.1 dans cet exemple.
De même, tout ce que vous entrez dans le tableau sera empêché d’être saisi dans la zone de saisie.
Remarque - prenez l'identificateur d'élément comme identifiant de l'élément auquel vous souhaitez appliquer ce paramètre De la même manière, si vous souhaitez l'appliquer à toutes les entrées dont le type est numéro dans JQuery -> $ (" input [type = 'numéro'] ")
var invalidChars = ["-", "e", "+", "E"];
$("input[type='number']").on("keydown", function(e){
if(invalidChars.includes(e.key)){
e.preventDefault();
}
}):
Cet exemple ci-dessus devrait fonctionner sur toutes les entrées avec un type de nombre et éviter que les caractères "-", "e", "+" et "E" soient saisis dans l'entrée.