Входной номер - проверка максимального ограничения не работает - PullRequest
0 голосов
/ 14 января 2019

У меня есть поле ввода number, которое вы можете увидеть в фрагменте ниже, похоже, это работает, но есть ошибка.

Когда вы вставляете 89, он работает и возвращает максимальное значение, как и положено.

Но если первая цифра меньше 7, она не работает (любая цифра меньше 69). Он сравнивает только первую цифру, а не последнюю цифру.

Как я могу использовать это правильно?

Спасибо!

<input type="number" name="teste" id="teste"
       value="0" min="0" max="7" 
       onchange="javascript: if (this.value > this.max) this.value = this.max;" />

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Атрибуты HTML могут содержать только текст (без других типов), поэтому вы выполняете лексикографический порядок . Пожалуйста, сравните:

console.log("27" > "7");
console.log(27 > 7);

Поскольку сортировка чисел по алфавиту не очень полезна, вы можете извлекать числа из строк :

console.log("27", typeof "27");
console.log(parseInt("27", 10), typeof parseInt("27", 10));

В настоящее время второй аргумент (основание или основание) должен по умолчанию равным 10 в большинстве случаев, но установка явно избегает неожиданностей.

0 голосов
/ 14 января 2019

Рассмотрим код: if (this.value > this.max) this.value = this.max;

В функции используются значения input и max , которые сравниваются как текст (или строковый тип данных). Ваше намерение состоит в том, чтобы сравнить цифры. Пример делает это:

HTML:

<body>

    Result: <p id="result">0</p>

    <input type="number" name="teste" id="teste" 
           value="0" min="0" max="7" 
           onchange="test(this)" />

    <script src="test.js"></script>

</body>


test.js:

function test(elmnt) {

    console.log(typeof elmnt.value); // this returns "string"
    console.log(typeof elmnt.max);   // this returns "string"

    // convert string numbers to integer numbers
    let intVal = parseInt(elmnt.value);
    let maxInt = parseInt(elmnt.max);

    console.log("Input: " + intVal);

    if (intVal > maxInt) {
        intVal = maxInt;
    }

    console.log("Result: " + intVal);
    document.getElementById("result").innerHTML = intVal;
}
0 голосов
/ 14 января 2019

Возможно преобразовать значение в целое число перед сравнением как это:

   <input type="number" name="teste" id="teste" value="0" min="0" max="7" onchange="javascript: if (parseInt(this.value) > this.max) this.value = this.max;" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...