J'ai l'élément d'entrée html5 suivant:
<input type="number">
Pourquoi cette entrée permet-elle de saisir le caractère 'e' dans le champ de saisie? Aucun autre caractère de l'alphabet ne peut être entré (comme prévu)
Utilisation de chrome v. 44.0.2403.107
Pour voir ce que je veux dire: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number
Parce que c'est exactement comment la spécification dit que cela devrait fonctionner. L’entrée numérique peut accepter nombres à virgule flottante , y compris les symboles négatifs et le caractère e
ou E
(où l’exposant est le nombre situé après le e
ou E
):
Un nombre à virgule flottante est composé des parties suivantes, dans exactement l'ordre suivant:
- Le premier caractère peut éventuellement être un caractère "
-
".- Un ou plusieurs caractères dans la plage "
0—9
".- Facultativement, les parties suivantes, dans exactement l'ordre suivant:
- un caractère "
.
"- un ou plusieurs caractères dans la plage "
0—9
"- Facultativement, les parties suivantes, dans exactement l'ordre suivant:
- un caractère "
e
" ou "E
"- éventuellement, un caractère "
-
" ou "+
"- Un ou plusieurs caractères dans la plage "
0—9
".
Nous pouvons le rendre aussi simple que ci-dessous
<input type="number" onkeydown="javascript: return event.keyCode == 69 ? false : true" />
Réponse mise à jour
nous pouvons le rendre encore plus simple comme @ 88 MPG le suggère
<input type="number" onkeydown="return event.keyCode !== 69" />
Le type de numéro d'entrée HTML autorise "e/E" car "e" signifie exponentiel, qui est un symbole numérique.
L'exemple 200000 peut également être écrit en tant que 2e5. J'espère que cela aide à vous remercier pour la question.
<input type="number" onkeydown="return FilterInput(event)" onpaste="handlePaste(event)" >
function FilterInput(event) {
var keyCode = ('which' in event) ? event.which : event.keyCode;
isNotWanted = (keyCode == 69 || keyCode == 101);
return !isNotWanted;
};
function handlePaste (e) {
var clipboardData, pastedData;
// Get pasted data via clipboard API
clipboardData = e.clipboardData || window.clipboardData;
pastedData = clipboardData.getData('Text').toUpperCase();
if(pastedData.indexOf('E')>-1) {
//alert('found an E');
e.stopPropagation();
e.preventDefault();
}
};
La meilleure façon de forcer l'utilisation d'un nombre composé uniquement de chiffres:
<input type="number" onkeydown="javascript: return event.keyCode === 8 || event.keyCode === 46 ? true : !isNaN(Number(event.key))" />
cela évite les 'e', '-', '+', '.' ... tous les caractères qui ne sont pas des nombres!
Pour n'autoriser que les touches numériques:
isNaN (Number (event.key))
mais accepter "Backspace" (keyCode: 8) et "Supprimer" (keyCode: 46) ...
Pour masquer la lettre e
et le signe moins -
, il suffit de rechercher:
onkeydown="return event.keyCode !== 69 && event.keyCode !== 189"