Como posso alterar ou remover as mensagens de erro padrão da validação de formulário HTML5?

142

Por exemplo, eu tenho um textfield. O campo é obrigatório, apenas números são obrigatórios e o tamanho do valor deve ser 10. Quando tento enviar um formulário com um valor de 5, a mensagem de erro padrão é exibida:Please match the requested format

<input type="text" required="" pattern="[0-9]{10}" value="">
  1. Como posso alterar as mensagens padrão dos erros de validação de formulário HTML 5?
  2. Se o 1º ponto puder ser concluído, existe uma maneira de criar alguns arquivos de propriedades e definir as mensagens de erro personalizadas nesses arquivos?
emilan
fonte
1
Eu encontrei um bug na resposta Mahoor13, ele não está funcionando em loop, então eu o corrigi e dou a resposta com alguma correção, que você pode encontrar na seção de respostas. Aqui está o link stackoverflow.com/questions/10361460/…
Darshan Gorasia 15/17

Respostas:

213

Encontrei um erro na resposta Ankur e o corrigi com esta correção:

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

O erro visto quando você define dados de entrada inválidos, corrija a entrada e envie o formulário. oops! você não pode fazer isso. Eu testei no firefox e chrome

Mahoor13
fonte
18
Sugiro contra o uso de eventos em linha. Não é uma boa prática.
Jared
2
@ Mahoor13 Eu escrevi semelhante, mas nunca valida. Você pode me dar uma dica? jsfiddle.net/2USxy
Sliq
1
Há também um costume Firefox propriedade que você pode adicionar que funciona bem: x-moz-errormessage = "Digite apenas números"
coliff
4
é melhor usar "onkeyup" em vez de "onchange" para verificar efetivamente se a entrada é válida ou não.
21968 Jamie Ville
4
Isso tem o seguinte problema (pelo menos no Chrome 55): quando a mensagem inválida aparece, se o usuário mantém o foco no campo inválido (sem clicar) e edita o campo, a mensagem continua aparecendo - mesmo quando o campo é válido - é necessário se concentrar ou acionar o envio.
leonbloy
96

Ao usar pattern =, ele exibirá o que você colocar no atributo attrib, portanto, nenhum JS necessário apenas faz:

<input type="text" required="" pattern="[0-9]{10}" value="" title="This is an error message" />
HTF
fonte
9
Resposta muito boa. Mas, como em todo o HTML5, a confiabilidade depende do navegador. Esta solução funcionou muito bem com 15 FF e Chrome 22, mas não com o Safari 5. (testado com OS X Lion)
james.garriss
1
Boa resposta, mas tenha cuidado com a compatibilidade com versões anteriores (ou mesmo atuais) aqui.
bohney
7
Quando eu definir um título de "foo" Eu fico "Por favor coincidir com o formato solicitado foo.", Então isso não vai funcionar para mim
Daan
7
O título também é usado como o texto da dica de ferramenta ao passar o mouse, portanto, eu ficaria longe dessa abordagem.
fotijr
2
O título também é usado como o texto da dica de ferramenta ao passar o mouse, portanto essa é provavelmente a melhor abordagem.
usar o seguinte código
35
<input type="text" pattern="[a-zA-Z]+"
oninvalid="setCustomValidity('Plz enter on Alphabets ')" />

Encontrei esse código em outro post.

Ankur Loriya
fonte
obrigado, funcionou para mim. Embora eu não tenha encontrado post, blog ou site mencionando isso.
precisa saber é o seguinte
1
Tome nota no post seguinte quando considerando a utilização setCustomValitidy stackoverflow.com/questions/16867407/...
Konstantinos Chertouras
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

Rikin Patel
fonte
14

Para impedir que a mensagem de validação do navegador apareça no seu documento, com o jQuery:

$('input, select, textarea').on("invalid", function(e) {
    e.preventDefault();
});
Luca Fagioli
fonte
13

você pode remover este alerta fazendo o seguinte:

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

basta definir a mensagem personalizada para um espaço em branco

user3894381
fonte
5

O setCustomValidity permite alterar a mensagem de validação padrão. Aqui está um exemplo simples de como usá-lo.

var age  =  document.getElementById('age');
    age.form.onsubmit = function () {
    age.setCustomValidity("This is not a valid age.");
 };
kta
fonte
3

Encontrei uma maneira acidentalmente agora: você pode precisar usar isso: 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/>
Mohammad Shojaa
fonte
3

Eu encontrei um bug na resposta Mahoor13, ele não está funcionando em loop, então eu o corrigi com esta correção:

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("");  
    }                 
}  

Ele funcionará perfeitamente em loop.

Darshan Gorasia
fonte
2

Como você pode ver aqui:

html5 oninvalid não funciona depois de corrigir o campo de entrada

É bom que você coloque dessa maneira, pois quando você corrige o erro desapareça a mensagem de aviso.

<input type="text" pattern="[a-zA-Z]+"
oninvalid="this.setCustomValidity(this.willValidate?'':'your custom message')" />
Jonathan Machado
fonte
2

Para definir uma mensagem de erro personalizada para validação em HTML 5,

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

e para remover esta mensagem quando o usuário digitar o uso de dados válidos,

onkeyup="setCustomValidity('')"

Espero que funcione para voce. Aproveitar ;)

Umesh Patil
fonte
0

Isso é trabalho para mim no 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')"
Sahan Pasindu Nirmal
fonte