У меня есть форма с несколькими разными наборами полей. У меня есть Javascript, который отображает наборы полей для пользователей по одному. Для браузеров, поддерживающих проверку HTML5, я бы хотел ее использовать. Однако я должен делать это на своих условиях. Я использую JQuery.
Когда пользователь щелкает ссылку JS для перехода к следующему набору полей, мне нужно, чтобы проверка происходила в текущем наборе полей и блокировала продвижение пользователя вперед в случае возникновения проблем.
В идеале, когда пользователь теряет фокус на элементе, проверка будет происходить.
В настоящее время у вас нет проверки на использование Javascript. Предпочел бы использовать собственный метод. :)
источник
$('<input type="submit">').hide().appendTo($myForm).click().remove();
form.submit()
нормально работать? Или HTML5 теперь требует кнопки отправки для проверки?.submit()
меня не работают звонки . Решение @ philfreo работает. Хм.TL; DR: Не заботитесь о старых браузерах? Используйте
form.reportValidity()
.Нужна поддержка устаревшего браузера? Читай дальше.
Это на самом деле это возможно проверка запуска вручную.
Я буду использовать в своем ответе простой JavaScript, чтобы улучшить возможность повторного использования, jQuery не требуется.
Предположим следующую HTML-форму:
И давайте возьмем наши элементы пользовательского интерфейса в JavaScript:
Не нужна поддержка устаревших браузеров, таких как Internet Explorer? Это вам.
Все современные браузеры поддерживают этот
reportValidity()
метод дляform
элементов.Вот и все, мы закончили. Кроме того, вот простой CodePen, использующий этот подход.
Подход для старых браузеров
Там, где
reportValidity()
это не поддерживается, нам нужно немного обмануть браузер. Итак, что мы будем делать?form.checkValidity()
. Это сообщит нам, действительна ли форма, но не отобразит пользовательский интерфейс проверки.В коде:
Этот код будет работать практически в любом обычном браузере (я успешно тестировал его до IE11).
Вот рабочий пример CodePen.
источник
В некоторой степени вы МОЖЕТЕ
trigger
проверять форму HTML5 и показывать подсказки пользователю без отправки формы!Две кнопки, одна для подтверждения, одна для отправки
Установите
onclick
прослушиватель на кнопке проверки, чтобы установить глобальный флаг (скажемjustValidate
), чтобы указать, что этот щелчок предназначен для проверки проверки формы.И установите
onclick
прослушиватель на кнопку отправки, чтобы установитьjustValidate
флаг в false.Затем в
onsubmit
обработчике формы вы проверяете флаг,justValidate
чтобы определить возвращаемое значение, и вызываете,preventDefault()
чтобы остановить отправку формы. Как вы знаете, проверка формы HTML5 (и подсказка графического интерфейса для пользователя) выполняется передonsubmit
событием, и даже если форма ДЕЙСТВИТЕЛЬНА, вы можете остановить отправку формы, вернув false или invokepreventDefault()
.И в HTML5 у вас есть метод для проверки валидации формы:
form.checkValidity()
тогда вы можете узнать, проверена ли форма в вашем коде или нет.Хорошо, вот демонстрация: http://jsbin.com/buvuku/2/edit
источник
Я не уверен, что мне стоит набирать все это с нуля, так как статья, опубликованная в A List Apart , довольно хорошо объясняет это. В MDN также есть удобное руководство по формам и проверке HTML5 (включая API, а также соответствующий CSS).
источник
Довольно легко добавить или удалить проверку HTML5 для наборов полей.
источник
Кажется, я нашел уловку: просто удалите
target
атрибут формы , затем используйте кнопку отправки, чтобы проверить форму и показать подсказки, проверить, действительна ли форма через JavaScript, а затем опубликовать что угодно. У меня работает следующий код:источник
HTML-код:
javascript (с использованием JQuery):
Надеюсь, что это поможет вам
источник
источник
Для поля ввода
источник
Когда есть очень сложный (особенно асинхронный) процесс проверки, есть простой обходной путь:
источник
Другой способ решить эту проблему:
источник
Uncaught TypeError: $(...).oninvalid is not a function
и я не вижу этого в документации jQuery.