html5 - tienda - ¿Por qué la entrada html con el tipo "número" permite que se ingrese la letra ''e'' en el campo?
javascript calcular precio (6)
Tengo el siguiente elemento de entrada html5:
<input type="number">
¿Por qué esta entrada permite que se ingrese el carácter ''e'' en el campo de entrada? No se puede ingresar ningún otro carácter del alfabeto (como se esperaba)
Usando Chrome v. 44.0.2403.107
Para ver a qué me refiero: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number
El tipo de número de entrada HTML permite "e / E" porque "e" significa exponencial, que es un símbolo numérico.
El ejemplo 200000 también se puede escribir como 2e5. Espero que esto ayude, gracias por la pregunta.
La mejor manera de forzar el uso de un número compuesto solo por dígitos:
<input type="number" onkeydown="javascript: return event.keyCode === 8 || event.keyCode === 46 ? true : !isNaN(Number(event.key))" />
esto evita ''e'', ''-'', ''+'', ''.'' ... todos los personajes que no son números!
Para permitir solo teclas numéricas:
isNaN (Number (event.key))
pero acepte "Retroceso" (código clave: 8) y "Eliminar" (código clave: 46) ...
Para ocultar tanto la letra
e
como el signo menos
-
solo busque:
onkeydown="return event.keyCode !== 69 && event.keyCode !== 189"
Podemos hacerlo tan simple como a continuación
<input type="number" onkeydown="javascript: return event.keyCode == 69 ? false : true" />
Respuesta actualizada
podemos hacerlo aún más simple como @ 88 MPG sugiere
<input type="number" onkeydown="return event.keyCode !== 69" />
Porque así es exactamente como
la especificación
dice que debería funcionar.
La entrada de número puede aceptar
números de coma flotante
, incluidos símbolos negativos y el carácter
e
o
E
(donde el exponente es el número después de
e
o
E
):
Un número de coma flotante consta de las siguientes partes, exactamente en el siguiente orden:
- Opcionalmente, el primer carácter puede ser un carácter "
-
".- Uno o más caracteres en el rango "
0—9
".- Opcionalmente, las siguientes partes, en exactamente el siguiente orden:
- un caracter "
.
"- uno o más caracteres en el rango "
0—9
"- Opcionalmente, las siguientes partes, en exactamente el siguiente orden:
- un carácter "
e
" o un carácter "E
"- opcionalmente, un carácter "
-
" o un carácter "+
"- Uno o más caracteres en el rango "
0—9
".
<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();
}
};