Недавно узнал о такой крутом псевдо классе для input как :invalid. И если к примеру поля required или тип не совпадает он может окрасить их в другой цвет( к примеру красный как у меня)
Проблема лишь в том что если я задаю input:invalid{border: 1px solid red;} , он изначально имеет красный цвет. ДА это логично ведь он required и поля пока не заполнены. Но возможно ли сделать так что бы лишь при попытке отправить ( неудачной) загоралось эта функция. Я думаю отловить события и при неудачной попытке лишь добавить класс. Но может есть более легкий способ
Сделал простое решение. Форма отправляется ajax'ом. Сделал что бы при клике на кнопку добавлялся класс который и включает эти красные поля. А при удачной отправке удалить класс формы
Ошибки будут подсвечены только при клике на кнопку отправки формы. Само с собой, кнопку отправки надо будет отпозиционировать абсолютно, чтобы потом сместить в конец формы.
Арсений Матыцин, это тоже не проблема, если мы говорим о решении проблемы на чистом CSS, без привлечения JavaScript вообще, то вопрос можно решить так. Дополнительно к вышеописанному способу, внутри формы создаем невидимую ссылку:
С помощью стилей делам нашу накладку активной при получении фокуса кнопкой отправки:
input[type="submit]:focus ~ a {
display: block !important;
}
Когда посетитель кликнет, на форму, чтобы исправить ошибки, в адрес страницы будет добавлен хеш #form_id и уже опираясь на него мы можем сохранить подсветку невалидных полей: