web-dev-qa-db-fra.com

Pourquoi l'entrée html de type "numéro" autorise-t-elle la lettre "e" dans le champ?

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

186
Gnarlywhale

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:

  1. Le premier caractère peut éventuellement être un caractère "-".
  2. Un ou plusieurs caractères dans la plage "0—9".
  3. Facultativement, les parties suivantes, dans exactement l'ordre suivant:
    1. un caractère "."
    2. un ou plusieurs caractères dans la plage "0—9"
  4. Facultativement, les parties suivantes, dans exactement l'ordre suivant:
    1. un caractère "e" ou "E"
    2. éventuellement, un caractère "-" ou "+"
    3. Un ou plusieurs caractères dans la plage "0—9".
180
j08691

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" />
45
codegeek

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.

14
Anon Cypher
<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();
    }
};
9
TruthSeeker

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) ...

7
A. Morel

Pour masquer la lettre e et le signe moins -, il suffit de rechercher:

onkeydown="return event.keyCode !== 69 && event.keyCode !== 189"
0
Austris Cirulnieks