У меня есть следующая форма 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"/>
В настоящее время, когда я нажимаю кнопку ввода, когда оба они пусты, появляется всплывающее окно с сообщением "Пожалуйста, заполните это поле". Как изменить это сообщение по умолчанию на "Это поле не может быть пустым"?
EDIT: Также обратите внимание, что сообщение об ошибке поля типа пароля просто *****
. Чтобы воссоздать это, введите имя пользователя и нажмите submit.
EDIT. Я использую Chrome 10 для тестирования. Пожалуйста, сделайте то же самое
Используйте setCustomValidity
:
document.addEventListener("DOMContentLoaded", function() {
var elements = document.getElementsByTagName("INPUT");
for (var i = 0; i < elements.length; i++) {
elements[i].oninvalid = function(e) {
e.target.setCustomValidity("");
if (!e.target.validity.valid) {
e.target.setCustomValidity("This field cannot be left blank");
}
};
elements[i].oninput = function(e) {
e.target.setCustomValidity("");
};
}
})
I изменен на ванильный JavaScript из Mootools, как предлагается @itpastorn в комментарии, но при необходимости вы сможете при необходимости выработать эквивалент Mootools.
Я обновил код здесь, так как setCustomValidity
работает несколько иначе, чем я понял, когда я изначально ответил. Если для параметра setCustomValidity
установлено значение, отличное от пустой, это приведет к тому, что поле будет считаться недействительным; поэтому вы должны очистить его до проверки действительности, вы не можете просто установить его и забыть.
Как указано в комментарии @thomasvdb ниже, вам нужно очистить пользовательскую достоверность в некотором событии вне invalid
, иначе может быть дополнительный проход через обработчик oninvalid
, чтобы его очистить.
input
. На данный момент он очищается только в случае invalid
события.
Вот код для обработки пользовательского сообщения об ошибке в HTML5
<input type="text" id="username" required placeholder="Enter Name"
oninvalid="this.setCustomValidity('Enter User Name Here')"
oninput="setCustomValidity('')" />
Это самая важная часть:
oninput="setCustomValidity('')"
Очень просто управлять настраиваемыми сообщениями с помощью HTML5
event oninvalid
Вот код:
<input id="UserID" type="text" required="required"
oninvalid="this.setCustomValidity('Witinnovation')">
Примечание.. Это больше не работает в Chrome, а не проверяется в других браузерах. См. Правки ниже. Этот ответ остается здесь для исторической справки.
Если вы считаете, что строка проверки действительно не должна быть задана кодом, вы можете установить атрибут заголовка элемента ввода для чтения: "Это поле не может быть пустым". (Работает в Chrome 10)
title="This field should not be left blank."
См. http://jsfiddle.net/kaleb/nfgfP/8/
И в Firefox вы можете добавить этот атрибут:
x-moz-errormessage="This field should not be left blank."
Это, похоже, изменилось с тех пор, как я изначально написал этот ответ. Теперь добавление заголовка не изменяет сообщение о действительности, оно просто добавляет добавление к сообщению. Эта скрипка все еще применяется.
Chrome теперь ничего не делает с атрибутом title как на Chrome 51. Я не уверен, в какой версии это изменилось.
Я создал небольшую библиотеку, чтобы облегчить изменение и перевод сообщений об ошибках. Вы даже можете изменить текст по типу ошибки, который в настоящее время недоступен с помощью title
в Chrome или x-moz-errormessage
в Firefox. Go проверить его на GitHub и дать отзыв.
Он используется как:
<input type="email" required data-errormessage-value-missing="Please input something">
Там есть демон в jsFiddle.
Очень просто управлять настраиваемыми сообщениями с помощью события HTML5
oninvalid
Вот код:
User ID
<input id="UserID" type="text" required
oninvalid="this.setCustomValidity('User ID is a must')">
Установив и отменив setCustomValidity
в нужное время, сообщение проверки будет работать безупречно.
<input name="Username" required
oninvalid="this.setCustomValidity('Username cannot be empty.')"
onchange="this.setCustomValidity('')" type="text" />
Я использовал onchange
вместо oninput
, который является более общим и возникает, когда значение изменяется в любом состоянии даже через JavaScript.
onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.
e
может быть нулевым, например, когда опция удалена из поля React Select. Не забудьте проверить это.
Попробуйте это, лучше и протестируйте:
HTML:
<form id="myform">
<input id="email"
oninvalid="InvalidMsg(this);"
name="email" oninput="InvalidMsg(this);"
type="email"
required="required" />
<input type="submit" />
</form>
JAVASCRIPT:
function InvalidMsg(textbox) {
if (textbox.value == '') {
textbox.setCustomValidity('Required email address');
}
else if (textbox.validity.typeMismatch){
textbox.setCustomValidity('please enter a valid email address');
}
else {
textbox.setCustomValidity('');
}
return true;
}
Демо:
Самый простой и самый чистый способ, который я нашел, - использовать атрибут data для хранения вашей пользовательской ошибки. Проверьте работоспособность node и обработайте ошибку, используя какой-то пользовательский html.
le javascript
if(node.validity.patternMismatch)
{
message = node.dataset.patternError;
}
и некоторый супер HTML5
<input type="text" id="city" name="city" data-pattern-error="Please use only letters for your city." pattern="[A-z ']*" required>
Az
допускает '[', '\', ']', '^', '_' и '`'.
Это очень простое управление требуемым сообщением типа ввода HTML. Нет необходимости в JS или CSS использовать HTML5.
Сначала вы можете использовать этот атрибут "oninvalid"
<input id="userid" type="text or others" required="" oninvalid="this.setCustomValidity('Hello Username cant be Blank!')">
Или вы можете использовать атрибут "oninput"
<input id="userid" type="text or others" required="" oninvalid="this.setCustomValidity('Hello Username cant be Blank!')" oninput="setCustomValidity('')">
У меня есть более простое решение ванили js:
Для флажков:
document.getElementById("id").oninvalid = function () {
this.setCustomValidity(this.checked ? '' : 'My message');
};
Для входов:
document.getElementById("id").oninvalid = function () {
this.setCustomValidity(this.value ? '' : 'My message');
};