Почему ввод html с типом «число» позволяет вводить букву «е» в поле?

145

У меня есть следующий элемент ввода html5:

<input type="number">

Почему этот ввод позволяет ввести символ 'e' в поле ввода? Никакой другой символ алфавита не может быть введен (как ожидалось)

Использование chrome v. 44.0.2403.107

Чтобы узнать, что я имею в виду: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number

  • 3
    Он также позволяет вводить +, - и . несколько раз в некоторых браузерах.
Теги:
input
numbers

5 ответов

147
Лучший ответ

Потому что именно так спецификация говорит, что она должна работать. Ввод номера может принимать числа с плавающей запятой, включая отрицательные символы и символ e или e:

Число с плавающей запятой состоит из следующих частей, в точности в следующем порядке:

  • Необязательно, первый символ может быть символом "-".
  • Один или несколько символов в диапазоне "0—9" .
  • Дополнительно, следующие части, в точности в следующем порядке:
    • символ "."
    • один или несколько символов в диапазоне "0—9"
  • Дополнительно, следующие части, в точности в следующем порядке:
    • символ "e" или символ <<21 >
    • необязательно, символ "-" или символ < <29 >
    • Один или несколько символов в диапазоне "0—9" .
  • 1
    Ах, спасибо. Я искал не в той спецификации
  • 2
    Я все еще озадачен этим, во-первых, я не математик, так что же означает «е» в контексте числа? Во-вторых, я не понимаю, почему input.value является пустой строкой, как только вы пишете «е», даже если есть цифры и символ разрешен ...
Показать ещё 8 комментариев
28

Мы можем сделать это Так просто, как ниже

<input type="number"  onkeydown="javascript: return event.keyCode == 69 ? false : true" />
  • 11
    Лучше использовать return event.keyCode !== 69 чтобы избежать ненужного троичного оператора. Также не рекомендую встраивание.
15

Тип вводимого числа HTML допускает "e/E", потому что "e" обозначает экспоненциальный, который является числовым символом.

Пример 200000 также можно записать как 2e5. Я надеюсь, что это помогает поблагодарить вас за вопрос.

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();
    }
};
  • 2
    Насколько вы уверены, что это не позволит вставить символ 'E' с функциями копирования и вставки?
  • 1
    Только что проверил, вы правы, он не работает для копирования и вставки ввода.
Показать ещё 2 комментария
0

Лучший способ принудительного использования числа, состоящего только из цифр:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню