Фон :
Я добавляю прослушиватели событий в форму HTML, которая проверяет правильность ввода в каждом поле.Например:
inputElement.addEventListener("input", function(event) {
if (!isValid(input.value)) {
input.setCustomValidity("Input is invalid");
} else {
input.setCustomValidity("");
}
});
Однако указанное поле формы не является обязательным - пользователь может отправить форму с пустым полем, но не может отправить ее с неверным вводом.
Проблема :
Если пользователь отправляет форму, даже не касаясь этого ввода (оставляя его пустым), событие "input"
никогда не происходит, и форму можно отправить.(Хорошо)
Если пользователь вводит неправильный ввод и отправляет форму, он получает предупреждение "input is invalid"
.(Хорошо)
Но, если они введут неверный ввод, получат предупреждающее сообщение, а затем удалят ввод, появится предупреждающее сообщение и форма будет отправлена.(Плохо)
Это происходит потому, что удаление входа вызывает событие input
.
Progress :
Я пытался использовать событие textInput
вместо этого, но у меня такое же поведение.Я проверил других доступных событий , но я не вижу ни одного, который мог бы решить эту проблему.
I мог бы заставить его работать, изменив мой isValid
функция, возвращающая true
если дана пустая строка, но я бы хотел избежать этого, если это возможно.Причина в том, что я упростил пример здесь, но на самом деле эта функция на самом деле isValidServiceId
и технически пустая строка не является действительным идентификатором службы.