Например, в моих формах я хотел бы использовать новые типы форм HTML5 <input type="url" />
( подробнее о типах здесь ).
Проблема в том, что Chrome хочет быть очень полезным и проверять эти элементы для меня, за исключением того, что он отстой. Если он не проходит встроенную проверку, там нет сообщения или указания, кроме элемента, получающего фокус. Я предварительно заполняю элементы URL с помощью "http://"
, и поэтому моя собственная пользовательская проверка просто обрабатывает эти значения как пустые строки, однако Chrome отклоняет это. Если бы я мог изменить правила валидации, это тоже сработало бы.
Я знаю, что я мог бы просто вернуться к использованию, type="text"
но я хочу приятные улучшения, используя эти новые типы предложений (например: он автоматически переключается на пользовательскую раскладку клавиатуры на мобильных устройствах):
Итак, есть ли способ отключить или настроить автоматическую проверку?
источник
inputmode
атрибут , который - если я правильно понимаю, что я прочитал - может использоваться для указания того, какой тип клавиатуры следует предлагать пользователю, когда он взаимодействует с полем, без каких-либо правил валидации. В какой-то момент в будущем использованиеinputmode
атрибута вместоtype
атрибута, вероятно, будет правильным решением этой проблемы, но пока нет.$('[inputmode]').each(function () { this.attr({type: this.attr('inputmode'), novalidate: true}) });
inputmode
бы. Делая все по-своему, вы все еще не можете (например) прочитать нечисловые значения, которые пользователь вводит в поле ввода типаnumber
. Например, попробуйте ввести что-нибудь нечисловое в текстовое поле этой скрипки и нажать кнопку.<input type='number'>
вообще не принимает нечисловые значения?Ответы:
Если вы хотите отключить проверку на стороне клиента для формы в HTML5, добавьте атрибут novalidate к элементу формы. Пример:
См. Https://www.w3.org/TR/html5/sec-forms.html#element-attrdef-form-novalidate.
источник
novalidate="novalidate"
иnovalidate=""
правильный синтаксис тоже.novalidate="novalidate"
метод при установкеnovalidate => true
в$options
массивеFormHelper::create()
. Спасибо Бассим за дополнительную информацию :)Я прочитал спецификацию и провел некоторое тестирование в Chrome, и если вы перехватываете «недопустимое» событие и возвращаете false, это, кажется, разрешает отправку формы.
Я использую jquery, с этим HTML.
Я не проверял это ни в одном другом браузере.
источник
invalid
событие и вернуть false не позволяет форме отправить.Я просто хотел добавить, что использование атрибута novalidate в вашей форме только предотвратит отправку формы браузером. Браузер все еще оценивает данные и добавляет псевдоклассы: valid и: invalid.
Я узнал об этом, потому что действительные и недействительные псевдо-классы являются частью стандартной таблицы стилей HTML5, которую я использовал. Я просто удалил записи в файле CSS, которые относятся к псевдоклассам. Если кто-то найдет другое решение, пожалуйста, дайте мне знать.
источник
<form action="" method="" class="" id="" novalidate>
Лучшее решение - использовать текстовый ввод и добавить атрибут inputmode = "url", чтобы обеспечить возможности клавиатуры URL. Спецификация HTML5 была задумана для этой цели. Если вы сохраните type = "url", вы получите проверку синтаксиса, которая бесполезна в каждом случае (лучше проверить, возвращает ли она ошибку 404, а не синтаксис, который является вполне допустимым и не очень помогает).
У вас также есть возможность переопределить шаблон по умолчанию с атрибутом pattern = "https?: //.+", например, чтобы сделать его более разрешающим.
Размещение атрибута novalidate в форме не является правильным ответом на заданный вопрос, потому что он удаляет проверку для всех полей в форме, и вы можете захотеть сохранить проверку для полей электронной почты, например.
Использование jQuery для отключения проверки также является плохим решением, поскольку оно должно работать без JavaScript.
В моем случае я помещаю элемент select с двумя параметрами (http: // или https: //) перед вводом URL-адреса, потому что мне просто нужны веб-сайты (а не ftp: // или другие вещи). Таким образом, я избегаю вводить этот странный префикс (самое большое сожаление по поводу Тима Бернерса-Ли и, возможно, основного источника синтаксических ошибок URL) и использую простой ввод текста с inputmode = "url" с заполнителями (без HTTP). Я использую jQuery и серверный скрипт для проверки реального существования веб-сайта (№ 404) и для удаления префикса HTTP, если он вставлен (я избегаю использовать шаблон как pattern = "^ ((? Http).) * $" чтобы не ставить префикс, потому что я думаю, что лучше быть более разрешительным)
источник
Вместо того, чтобы пытаться выполнить окончательную проверку браузера, вы можете вставить
http://
текст в качестве заполнителя. Это с самой страницы, на которую вы ссылались:Это не было бы точно так же, поскольку это не обеспечило бы эту "отправную точку" для пользователя, но это, по крайней мере, на полпути.
источник
Я нашел решение для Chrome с помощью CSS этого следующего селектора, не обходя встроенную форму проверки, которая может быть очень полезна.
Таким образом, вы также можете настроить ваше сообщение ...
Я получил решение на этой странице: http://trac.webkit.org/wiki/Styling%20Form%20Controls
источник
Просто используйте novalidate в вашей форме.
Ура !!!
источник
Вот функция, которую я использую, чтобы Chrome и Opera не отображали некорректный диалог ввода даже при использовании novalidate.
источник
Вы можете добавить немного javascript, чтобы преодолеть эти неприятные пузыри проверки и добавить свои собственные валидаторы.
источник
Если пометить элемент формы как
required=""
тоnovalidate=""
не поможет.Способ обойти
required
проверку - отключить элемент .источник
Вы можете установить простое расширение Chrome и просто отключить проверку на лету https://chrome.google.com/webstore/detail/html5-form-validation-err/dcpagcgkpeflhhampddilklcnjdjlmlb/related
по умолчанию все будет работать по умолчанию, но вы сможете отключить проверку html5 одним щелчком мыши на значке расширения на панели инструментов
источник