У меня есть следующий элемент ввода html5:
<input type="number">
Почему этот ввод позволяет ввести символ 'e' в поле ввода? Никакой другой символ алфавита не может быть введен (как ожидалось)
Использование chrome v. 44.0.2403.107
Чтобы узнать, что я имею в виду: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number
Потому что именно так спецификация говорит, что она должна работать. Ввод номера может принимать числа с плавающей запятой, включая отрицательные символы и символ e
или e
:
Число с плавающей запятой состоит из следующих частей, в точности в следующем порядке:
- Необязательно, первый символ может быть символом "
-
".- Один или несколько символов в диапазоне "
0—9
" .- Дополнительно, следующие части, в точности в следующем порядке:
- символ "
.
"- один или несколько символов в диапазоне "
0—9
"- Дополнительно, следующие части, в точности в следующем порядке:
- символ "
e
" или символ <<21 >- необязательно, символ "
-
" или символ < <29 >- Один или несколько символов в диапазоне "
0—9
" .
Мы можем сделать это Так просто, как ниже
<input type="number" onkeydown="javascript: return event.keyCode == 69 ? false : true" />
return event.keyCode !== 69
чтобы избежать ненужного троичного оператора. Также не рекомендую встраивание.
Тип вводимого числа HTML допускает "e/E", потому что "e" обозначает экспоненциальный, который является числовым символом.
Пример 200000 также можно записать как 2e5. Я надеюсь, что это помогает поблагодарить вас за вопрос.
<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();
}
};
Лучший способ принудительного использования числа, состоящего только из цифр:
<input type="number" onkeydown="javascript: return event.keyCode === 8 || event.keyCode === 46 ? true : !isNaN(Number(event.key))" />
это позволяет избежать "е", "-", "+", "."...
Чтобы разрешить только цифровые клавиши:
IsNaN (Количество (event.key))
но принять "Backspace" (keyCode: 8) и "Удалить" (keyCode: 46)...
.
несколько раз в некоторых браузерах.