Подтвердить что ты не робот

Почему ввод html с типом "число" позволяет ввести букву "e" в поле?

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

<input type="number">

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

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

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

4b9b3361

Ответ 1

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

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

  1. Необязательно, первый символ может быть символом " - ".
  2. Один или несколько символов в диапазоне " 0—9 ".
  3. При желании, следующие части, в точно следующем порядке:
    1. символ " . "
    2. один или несколько символов в диапазоне " 0—9 "
  4. При желании, следующие части, в точно следующем порядке:
    1. символ " e " или " E "
    2. по выбору, символ " - " или " + "
    3. Один или несколько символов в диапазоне " 0—9 ".

Ответ 2

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

<input type="number"  onkeydown="javascript: return event.keyCode == 69 ? false : true" />

Ответ 3

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

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

Ответ 4

<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();
    }
};

Ответ 5

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

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

Ответ 6

Чтобы скрыть букву e и знак минуса -, просто перейдите по ссылке:

onkeydown="return event.keyCode !== 69 && event.keyCode !== 189"