Как стать автором
Обновить

Комментарии 13

Вы правильно подметили, что данный обработчик handleKeydown обрабатывает далеко не все возможные кейсы.

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

Для всех остальных современных браузеров мы уже не используем событие `keydown`, а опираемся на комбинацию `beforeinput`/`input` событий.

Подробнее об всем этом можно почитать в моей предыдущей статье "Трудности маскирования текстового поля".

НЛО прилетело и опубликовало эту надпись здесь

Серебряной пули в данном вопросе, к сожалению, нет.
То есть, если ваша маска требует поддержки разных локалей, то придется пописать немного кода.

Но Maskito уже сейчас предоставляет несколько встроенных конфигурируемых популярных масок (пакет @maskito/kit), которые пытаются учитывать особенности разных стран.
Например: маска Number позволяет легко задавать свои decimalSeparator и thousandSeparator, маска Date предоставляет разные форматы дат (dd/mm/yyyy, yyyy/mm/dd, mm/dd/yyyy), а маска Time дает возможность настраивать 12/24-часовой формат времени.

Пакет @maskito/kit будет продолжать расширяться популярными решениями. И, разумеется, мы будем продолжать всегда держать в уме вопросы локализации.

Зачем вообще мешать пользователю писать дату в любом удобном ему формате?

Почему ваши формы заставляют пользователей указывать дату, к примеру, в формате 01.05.1999? Почему пользователь не может написать "1 января 1999 года"? Кажется, что компьютер может справится с задачей парсинга и переспросить, если не справился.

Почему я должен задавать номер телефона в виде +7 (999) 997-ХХ-YY, если мне хочется задавать его в виде +7 999 99-XXX-YY? Почему я не могу так сделать, тем более, если номер станет лучше читаться? Зачем вообще скобочки вокруг кода города, если его обязательно набирать?

Как мне объяснить бабушке по телефону, что у неё не сломалась клавиатура, а просто программисты запрещают писать в некоторых полях ввода буквы, но не предупреждают об этом?

Кажется, что вся проблема "маскирования" заключается в том, что вместо того, чтобы тратить силы на поддержку любого удобного пользователю ввода, вы тратите силы на то, чтобы запретить пользователю вводить данные в любом формате, отличном от того, который используется в вашей БД, ну или просто от "единого верного способа".

НЛО прилетело и опубликовало эту надпись здесь

И какая в этом проблема? Просто вычислите, кто к вам пришёл и откуда, и сделайте вывод. Не уверены? Переспросите.

В текущем интерфейсе у Тинкоффа этот вопрос тоже не решён: там предлагают заполнить 01.04.1999, ну окей, я зашёл из Америки и заполнил привычно. И ошибся. Если день не больше 12, то никто и не заметит подмены, ни я, ни сотрудник банка.

На самом деле, у меня даже была именно такая проблема как-то в ВТБ. Сотрудник перепутал день и месяц моего рождения в поле ввода и мне стоило потом больших усилий доказать, что я -- это я. И никакая маскификация не помогла.

По второму вопросу по ссылке, как раз сделано верно, ничего не запрещают вводить, клавиатура работает. Но в Taiga UI как раз буквы запрещены с помощью той самой библиотеки из статьи.

НЛО прилетело и опубликовало эту надпись здесь

Плохой UX -- не когда ты переспрашиваешь у пользователя, если неуверен, а когда ты заполняешь базу неверными данными или вообще не даёшь пользователю заполнить форму и просто теряешь клиента. Лучший способ этого достичь -- ввести маски в полях и валидацию ввода.

Мой имейл, к примеру, содержит 2 символа до собачки, множество раз я не мог даже зарегистрироваться где-то просто потому, что программист решил, что такого не бывает.

НЛО прилетело и опубликовало эту надпись здесь

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

Я-то напишу дополнительные символы в имейле, а неайтишник — нет

И борюсь я не с ветряными мельницами, а с плохим интерфейсом.

Дизайнеры трудятся, маски отрисовывают, программисты трудятся, думают как заимплементить, во всех браузерах желательно, тестировщики баги ищут. Называется, ответственная социальная политика =)

Если серьёзно, то согласен с вами, все эти причинения удобств могут быть, как правило заменены несколькими replace-ами на стороне приведения данных к единому формату.

Ох уж эта дата... Звёздочку поставил, issue завёл.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий