Подход, который я использую для проверки полей, довольно прост:
Ты не должен сбрасывать пользовательский ввод
Если введенная пользователем запись недействительна, пометьте ее как таковую - но не изменяйте значение.
Причина, по которой вы стоите, проста - последовательность.
Рассмотрим, например, пару полей, используемых для ввода диапазона дат, где «действительный» означает, что дата начала предшествует дате окончания.
Теперь пользователь хочет ввести совершенно новый диапазон.
Если ваша система немедленно отбрасывает недействительные записи, вы заставляете своего пользователя вести себя иначе. Для ввода более раннего диапазона дат, дата начала должна быть введена первой; для ввода более позднего диапазона дат, конечная дата должна быть введена первой. Unfriendly.
Вместо этого соблюдайте ввод данных пользователем - при вводе даты начала свободно помечайте ее как недействительную , но оставляйте значение на месте . Затем, когда введена последняя дата, оба поля теперь проверяются.
Это также мотивация для динамического отображения проверки (при изменении значений), но не для ограничения перемещения пользователей между полями.