Не разрешать вводить числа между максимальным и минимальным значением
Я работаю над проектом Angular 4. У меня есть HTML <input type="number">
с min
max
а также step
атрибутов. Моя цель - не набирать цифры за пределами минимального и максимального диапазона, что удобно для пользователя. Как я могу это сделать?
function myFunction(e) {
var min = -100;
var max = 100;
var txtValue = document.getElementById("txt").value;
var pressedValue = e.key;
var combined = parseFloat(txtValue, pressedValue);
console.log(`OLD:${txtValue}\nNEW:${pressedValue}\nCOMBINED:${combined}`);
if (combined > max) {
e.preventDefault();
console.log('ohhw snapp');
}
}
<input type="number" id="txt" value="Hello" onkeydown="myFunction(event)" min="-100" max="100" step="0.05">
Мой пример JSFiddle
2 ответа
По причинам UX, я бы порекомендовал что-то подобное. Это может запутать пользователя, если он просто думает, что его клавиатура не работает.
$('.range-enforced').on('change', function(e){
var min=parseFloat($(this).attr('min'));
var max=parseFloat($(this).attr('max'));
var curr=parseFloat($(this).val());
if (curr > max) { $(this).val(max); var changed=true; }
if (curr < min) { $(this).val(min); var changed=true; }
if (changed) {
$warning = $(this).siblings('.warning')
$warning.text('Only ' + min + ' through ' + max + ' allowed');
$warning.show()
$warning.fadeOut(2500);
}
});
input + .warning {
background: #ffff99;
display: inline-block
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" class="range-enforced" min="-100" max="100" />
<div class="warning" style="display: none;"></div>
Первая проблема, которую я вижу, это то, что вы предоставляете 2 параметра для parseFloat, который принимает только 1 (возможно, вы запутались с parseInt, который принимает 2 параметра - строку и основание. Сначала вы должны объединить числа и выполнить 1 анализирование с плавающей запятой для объединенного значения,
например
function myFunction() {
var min = -100;
var max = 100;
var inputRef = document.getElementById("txt");
var txtValue = inputRef.value;
if(isNaN(parseFloat(txtValue))){
console.log("warning input is not a number");
return;
}
var newNum = parseFloat(txtValue);
console.log(`NEW:${newNum}`);
if (newNum > max || newNum < min) {
console.log('input not in range (' + min + ", " + max + ")");
inputRef.value = "";
}
}
<input type="number" id="txt"
onkeyup="myFunction()"
min="-100"
max="100"
step="0.05"
>
Вход вернется к пустому состоянию, если вход не находится в диапазоне при включении. Согласно комментарию выше, вы можете использовать это, чтобы уведомить пользователя о проблеме.