Показать сообщение отдельно
  #7 (permalink)  
Старый 09.03.2020, 23:01
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от workpage
В этом случае нельзя во первых ограничить кол-во введённых знаков, а во вторых опять таки можно ввести число не из диапазона.
Не забывайте про ввод значения пользователями, <input type="number"> позволяет вводить значение сразу с клавиатуры с цифрами (вам ведь не нужен буквенный ввод!), «прокрутка» чисел стрелками, что несомненно улучшает UX, и дополнительный скрипт для этого не нужен.

Также стандартный синтаксис упрощает работу с граничными значениями — вы можете их вводить в одном месте — там, где определено поле ввода!

<input type="number" min="1" max="255" step="1">

<script>
function constrainField(field) {
	field.value = field.value === ''
		? field.value :
		Math.clamp(Number(field.value.replace(/\D/g, '')), field.min, field.max);
}
if("clamp" in Math === false)
Math.clamp = function clamp(x, lower, upper) {
	return Math.min(Math.max(lower, x), upper);
}
addEventListener("input", event => {
	if(event.target.matches("input[type='number'][min][max]"))
		constrainField(event.target);
});
</script>


https://rwaldron.github.io/proposal-...sec-math.clamp

Сообщение от laimas
Это как, если задано макс. 255 и это три цифры?
Число может удовлетворять условию, но оно будет дробным. (Например, 249.1) Добавьте атрибут step="1" и min должен быть целым числом, чтобы проверку проходили только целые числа.
Ответить с цитированием