У меня есть следующая форма HTML5: http://jsfiddle.net/nfgfP/
<form id="form" onsubmit="return(login())">
<input name="username" placeholder="Username" required />
<input name="pass" type="password" placeholder="Password" required/>
<br/>Remember me: <input type="checkbox" name="remember" value="true" /><br/>
<input type="submit" name="submit" value="Log In"/>
В настоящее время, когда я нажимаю клавишу ввода, когда они оба пусты, появляется всплывающее окно с надписью «Пожалуйста, заполните это поле». Как бы изменить это сообщение по умолчанию на «Это поле нельзя оставить пустым»?
РЕДАКТИРОВАТЬ: Также обратите внимание, что сообщение об ошибке поля типа пароля просто *****
. Чтобы воссоздать это, введите имя пользователя и нажмите «Отправить».
РЕДАКТИРОВАТЬ : я использую Chrome 10 для тестирования. Пожалуйста, сделайте то же самое
javascript
html
forms
validation
Skizit
источник
источник
Ответы:
Используйте
setCustomValidity
:Я перешел на ванильный JavaScript из Mootools, как предложено @itpastorn в комментариях, но вы должны быть в состоянии выработать эквивалент Mootools, если это необходимо.
редактировать
Я обновил здесь код, так как он
setCustomValidity
работает немного иначе, чем я понял, когда первоначально отвечал. ЕслиsetCustomValidity
установлено значение, отличное от пустой строки, поле будет считаться недействительным; поэтому вы должны очистить его перед проверкой действительности, вы не можете просто установить его и забыть.Дальнейшее редактирование
Как указано в комментарии @ thomasvdb ниже, вам нужно очистить пользовательскую валидность в каком-либо событии вне,
invalid
иначе может быть дополнительный проход черезoninvalid
обработчик для его очистки.источник
input
событии. На данный момент это только очищается, еслиinvalid
событие запускается.$("")
возвращает массив объектов, даже если есть только один.$("")[i]
Скорее всего, что вы хотите.Вот код для обработки пользовательских сообщений об ошибках в HTML5
Эта часть важна, потому что она скрывает сообщение об ошибке, когда пользователь вводит новые данные:
источник
Управлять пользовательскими сообщениями с помощью
HTML5
события очень простоoninvalid
Вот код:
Это самое главное:
источник
onchange="this.setCustomValidity('')"
ошибки исчезнет. Проверьте мой ответ ниже.oninput
вместоonvalid
.oninput
это более универсальное решение,onvalid
у меня не работало даже в Chrome.Примечание. Это больше не работает в Chrome и не тестируется в других браузерах. Смотрите правки ниже. Этот ответ оставлен здесь для исторической справки.
Если вы чувствуете, что строка проверки действительно не должна быть задана кодом, вы можете установить атрибут заголовка входного элемента следующим образом: «Это поле нельзя оставлять пустым». (Работает в Chrome 10)
Смотрите http://jsfiddle.net/kaleb/nfgfP/8/
А в Firefox вы можете добавить этот атрибут:
редактировать
Это, кажется, изменилось, так как я первоначально написал этот ответ. Теперь добавление заголовка не изменяет достоверность сообщения, оно просто добавляет приложение к сообщению. Скрипка выше все еще применяется.
Редактировать 2
Chrome теперь ничего не делает с атрибутом title в Chrome 51. Я не уверен, в какой версии это изменилось.
источник
x-moz-errormessage="This field should not be left blank."
Управлять пользовательскими сообщениями с помощью
HTML5
oninvalid
события очень простоВот код:
источник
Если установить и отменить установку
setCustomValidity
в нужное время, сообщение проверки будет работать без сбоев.Я использовал
onchange
вместо того,oninput
который является более общим и происходит, когда значение изменяется в любом состоянии даже через JavaScript.источник
onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.e
может быть нулевым, например, когда опция удалена из поля React Select. Не забудьте проверить это.onChange
и,onInvalid
какinputProps={{ onInvalid: …, onChange: …, }}
type='email'
немного более трудно лечить, так как с помощьюsetCustomValidity
наборовcustomError: true
дляe.target.validity
даже если вход активен. Я пытаюсь найти способ исправить это.Я сделал небольшую библиотеку, чтобы облегчить изменение и перевод сообщений об ошибках. Вы даже можете изменить текст по типу ошибки, который в настоящее время недоступен
title
в Chrome илиx-moz-errormessage
Firefox. Перейти проверить его на GitHub , и давать обратную связь.Он используется как:
Там в демо доступны на jsFiddle .
источник
Попробуйте это, это лучше и проверено:
HTML:
JAVASCRIPT:
Демо-версия:
http://jsfiddle.net/patelriki13/Sqq8e/
источник
Самый простой и чистый способ, который я нашел, - это использовать атрибут data для хранения вашей ошибки. Проверьте правильность узла и обработайте ошибку, используя некоторый пользовательский HTML.
Le Javascript
и немного супер HTML5
источник
A-z
разрешены '[', '\', ']', '^', '_' и '`'.Решение для предотвращения сообщений об ошибках Google Chrome при вводе каждого символа:
источник
У меня есть более простое решение vanilla js only:
Для флажков:
Для входов:
источник
Приспосабливая ответ Салара к JSX и React, я заметил, что React Select не ведет себя как
<input/>
поле в отношении проверки. По-видимому, необходимо несколько обходных путей, чтобы показать только пользовательское сообщение и не показывать его в неудобное время.Я поднял вопрос здесь , если это поможет. Вот CodeSandbox с рабочим примером, и самый важный код там воспроизводится здесь:
источник
Хорошо, oninvalid работает хорошо, но показывает ошибку, даже если пользователь ввел правильные данные. Поэтому я использовал ниже, чтобы заняться этим, надеюсь, это будет работать и для вас,
oninvalid="this.setCustomValidity('Your custom message.')"
onkeyup="setCustomValidity('')"
источник
Может быть легко обработано, просто поместив 'title' с полем:
источник