Это решается под ключ в ~200 строк кода, все "вопросы и тонкие моменты" в поведении формы давно стандартизированы браузерными API. Лениться это делать руками, спотыкаясь о костыли комбайнов, учитывая уровень зп современного фронтендера - отвратительно (и да, можете кидать в меня тапками)