их валидацией через vue.
Хочу сделать ограничения инпутов по длине и другим условиям.
В данный момент стоит просто валидация: [если не выполняется какое-то условие] - input красный, пользователь видит сообщение что не так с инпутом.
Подумываю может стоит сделать явно лимит без возможности вводить данные если какое-то условие не выполняется, например: лимит более 10 символов? не вводим данные.
Правда, меня напрягает то что вместо v-model="inputValue" скорее всего, придется перевести на формат:
// input template
:value="inputValue" @input="onInput"
// script
function onInput (e) {if (condition) ) inputValue.value = e.target.value }
- стоит ли делать вообще так?
- может есть какие-то best practies / статья именно по этой теме?
- vue3
Сложна. Есть пара общепринятых либок (vuelidate, vee-validate) но как по мне «шо то …, шо это …, и это обе … такие что … я … … …» ((с) Эскобар). А если писать свои лесапеды, то кто-то точно наедит на то что исспользуюются не типовые решения, а городится свой огород🥲
а у vuealidate и/или vee-validate есть возможность ограничивать ввод данных?
Лучше написать в красном сообщении (или тултип) о том что введите от x до y, разрешенные символы такие-то. Это лучше чем насильно обрезать имхо. Например, большая часть инпутов для телефонов ломается при автозаполнении, и это люто бесит, когда вставляешь из буфера, а оно само «+78926…»
Валидировать итоговую строку можно на ивенте @keypress, который идет до @input. Если строка не соответствует условиям, то запускаем event.preventDefault()
А оно на вставку мышкой (через контекстное меню) точно тригернет?)
Ну, тут еще нюанс есть. Вот есть например поле для ввода, а там формат: 2 буквы + 6 цифр Я бы сказал что удобно сразу ограничивать ввод, пропускать только 2 буквы, а потом 6 цифр, а буквы блочить
Такая техника гуглится по masked input, норм для всяких там купонов, серий паспортов
Должно, сейчас проверю
да, как раз паспорт. Я так понимаю там просто указывается формат по типу: X{2}Y{6} (ну для примера чисто) и оно само ограничивает все?
Обсуждают сегодня