Как я могу изменить или удалить сообщения об ошибках проверки формы HTML5 по умолчанию?

142

Например у меня есть textfield. Поле является обязательным, требуются только цифры и длина значения должна быть 10. Когда я пытаюсь отправить форму со значением, длина которого равна 5, появляется сообщение об ошибке по умолчанию:Please match the requested format

<input type="text" required="" pattern="[0-9]{10}" value="">
  1. Как я могу изменить сообщения об ошибках проверки формы HTML 5 по умолчанию?
  2. Если 1-й пункт может быть выполнен, то есть ли способ создать некоторые файлы свойств и установить в этих файлах пользовательские сообщения об ошибках?
emilan
источник
1
Я нашел ошибку в ответе Mahoor13, она не работает в цикле, поэтому я исправил ее и дал ответ с некоторыми исправлениями, которые вы можете найти в разделе ответов. Вот ссылка stackoverflow.com/questions/10361460/…
Даршан Горасия

Ответы:

213

Я нашел ошибку в ответе Анкура и исправил ее с помощью этого исправления:

 <input type="text" pattern="[a-zA-Z]+"
    oninvalid="setCustomValidity('Plz enter on Alphabets ')"
    onchange="try{setCustomValidity('')}catch(e){}" />

Ошибка наблюдается, когда вы устанавливаете неверные входные данные, затем исправляете ввод и отправляете форму. упс! ты не можешь сделать это Я проверил это на Firefox и Chrome

Mahoor13
источник
18
Я предлагаю не использовать встроенные события. Это не хорошая практика.
Джаред
2
@ Mahoor13 Я написал это примерно так, но это никогда не подтверждается. Можете ли вы дать мне подсказку? jsfiddle.net/2USxy
Sliq
1
Также можно добавить пользовательское свойство Firefox, которое работает хорошо: x-moz-errormessage = "Пожалуйста, введите только цифры"
coliff
4
лучше использовать «onkeyup» вместо «onchange», чтобы эффективно проверить, действителен ли ввод или нет.
Джем Вилле
4
Это имеет следующую проблему (по крайней мере, в Chrome 55): когда всплывает недопустимое сообщение, если пользователь сохраняет фокус в недопустимом поле (не щелкая) и редактирует поле, сообщение продолжает всплывать - даже если поле действительно - это необходимо либо сфокусироваться, либо вызвать отправку.
Леонблой
96

При использовании pattern = он будет отображать все, что вы положили в атрибут заголовка, поэтому JS не требуется, просто сделайте:

<input type="text" required="" pattern="[0-9]{10}" value="" title="This is an error message" />
HTF
источник
9
Очень хороший ответ. Но, как и во всем HTML5, надежность зависит от браузера. Это решение отлично работало с FF 15 и Chrome 22, но не с Safari 5. (протестировано с OS X Lion)
james.garriss
1
Хороший ответ, но будьте осторожны с обратной (или даже текущей) совместимостью здесь.
Богни
7
Когда я устанавливаю заголовок «foo», я получаю «Пожалуйста, сопоставьте запрашиваемый формат. Foo», так что это не сработает для меня
Daan
7
Заголовок также используется в качестве текста всплывающей подсказки при наведении мыши, поэтому я бы держался подальше от этого подхода.
fotijr
2
Заголовок также используется в качестве текста всплывающей подсказки при наведении мыши, так что это, вероятно, лучший подход.
OdraEncoded
35
<input type="text" pattern="[a-zA-Z]+"
oninvalid="setCustomValidity('Plz enter on Alphabets ')" />

Я нашел этот код в другом посте.

Анкур Лория
источник
спасибо, у меня это сработало. Хотя я не нашел пост или блог или сайт, упоминающий это.
user219628
1
Обратите внимание на следующий пост при рассмотрении использования setCustomValitidy stackoverflow.com/questions/16867407/…
Константинос Чертурас
15

HTML:

<input type="text" pattern="[0-9]{10}" oninvalid="InvalidMsg(this);" name="email" oninput="InvalidMsg(this);"  />

JAVASCRIPT:

function InvalidMsg(textbox) {

     if(textbox.validity.patternMismatch){
        textbox.setCustomValidity('please enter 10 numeric value.');
    }    
    else {
        textbox.setCustomValidity('');
    }
    return true;
}

Fiddle Demo

Рикин Патель
источник
14

Чтобы предотвратить появление сообщения проверки браузера в вашем документе с помощью jQuery:

$('input, select, textarea').on("invalid", function(e) {
    e.preventDefault();
});
Люка Фагиоли
источник
13

Вы можете удалить это предупреждение, выполнив следующие действия:

<input type="text" pattern="[a-zA-Z]+"
    oninvalid="setCustomValidity(' ')"
/>

просто установите пользовательское сообщение на один пробел

user3894381
источник
11

Вы можете изменить их через API проверки ограничений: http://www.w3.org/TR/html5/constraints.html#dom-cva-setcustomvalidity

если вам нужно простое решение, вы можете скачать civem.js, пользовательские сообщения об ошибках проверки ввода JavaScript lib, скачать здесь: https://github.com/javanto/civem.js, демо-версию здесь: http://jsfiddle.net/ hleinone / njSbH /

альберт
источник
5

SetCustomValidity позволяет изменить стандартное сообщение проверки. Вот простой пример того, как его использовать.

var age  =  document.getElementById('age');
    age.form.onsubmit = function () {
    age.setCustomValidity("This is not a valid age.");
 };
КТА
источник
3

Я нашел способ случайно сейчас: вам нужно использовать это: data-error: ""

<input type="username" class="form-control" name="username" value=""
placeholder="the least 4 character"
data-minlength="4" data-minlength-error="the least 4 character"
data-error="This is a custom Errot Text fot patern and fill blank"
max-length="15" pattern="[A-Za-z0-9]{4,}"
title="4~15 character" required/>
Мохаммед Шоджаа
источник
3

Я нашел ошибку в ответе Mahoor13, она не работает в цикле, поэтому я исправил ее с помощью этого исправления:

HTML:

<input type="email" id="eid" name="email_field" oninput="check(this)">

Javascript:

function check(input) {  
    if(input.validity.typeMismatch){  
        input.setCustomValidity("Dude '" + input.value + "' is not a valid email. Enter something nice!!");  
    }  
    else {  
        input.setCustomValidity("");  
    }                 
}  

Это будет прекрасно работать в цикле.

Даршан Горасия
источник
2

Чтобы установить пользовательское сообщение об ошибке для проверки HTML 5,

oninvalid="this.setCustomValidity('Your custom message goes here.')"

и удалить это сообщение, когда пользователь вводит правильное использование данных,

onkeyup="setCustomValidity('')"

Надеюсь, что это работает для вас. Наслаждаться ;)

Умеш Патил
источник
0

Это работа для меня в Chrome

    <input type="text" name="product_title" class="form-control" 
required placeholder="Product Name" value="" pattern="([A-z0-9À-ž\s]){2,}"
oninvalid="setCustomValidity('Please enter on Producut Name at least 2 characters long')"
Сахан Пасинду Нирмал
источник