Eu tenho o seguinte formulário 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"/>
Atualmente, quando clico em enter quando ambos estão em branco, uma caixa pop-up é exibida com a mensagem "Por favor, preencha este campo". Como eu alteraria essa mensagem padrão para "Este campo não pode ser deixado em branco"?
EDIT: Observe também que a mensagem de erro do campo de senha do tipo é simples *****
. Para recriar isso, atribua um valor ao nome de usuário e clique em enviar.
EDIT : estou usando o Chrome 10 para testes. Faça o mesmo
javascript
html
forms
validation
Skizit
fonte
fonte
Respostas:
Use
setCustomValidity
:I alteradas para baunilha JavaScript de Mootools como sugerido por @itpastorn nos comentários, mas você deve ser capaz de trabalhar as Mootools equivalente, se necessário.
Editar
Atualizei o código aqui, pois
setCustomValidity
funciona um pouco diferente do que eu entendi quando respondi originalmente. SesetCustomValidity
for definido como algo diferente da sequência vazia, fará com que o campo seja considerado inválido; portanto, você deve limpá-lo antes de testar a validade, não pode simplesmente configurá-lo e esquecer.Edição adicional
Conforme indicado no comentário do @ thomasvdb abaixo, você precisa limpar a validade personalizada em algum evento fora de
invalid
outro caso, pode haver uma passagem extra pelooninvalid
manipulador para limpá-la.fonte
input
evento. No momento, só será liberado se oinvalid
evento for disparado.$("")
retorna uma matriz de objetos, mesmo se houver apenas um.$("")[i]
provavelmente é o que você deseja.Aqui está o código para lidar com mensagens de erro personalizadas em HTML5
Esta parte é importante porque oculta a mensagem de erro quando o usuário insere novos dados:
fonte
É muito simples controlar mensagens personalizadas com a ajuda do
HTML5
eventooninvalid
Aqui está o código:
Isso é mais importante:
fonte
onchange="this.setCustomValidity('')"
o bug desaparecerá. Verifique minha resposta abaixo.oninput
vez deonvalid
.oninput
é a solução mais universal,onvalid
não funcionou nem no Chrome para mim.Nota: isso não funciona mais no Chrome, não é testado em outros navegadores. Veja as edições abaixo. Esta resposta está sendo deixada aqui para referência histórica.
Se você achar que a sequência de validação realmente não deve ser definida por código, defina o atributo title do elemento de entrada como "Este campo não pode ser deixado em branco". (Funciona no Chrome 10)
Veja http://jsfiddle.net/kaleb/nfgfP/8/
E no Firefox, você pode adicionar este atributo:
Editar
Isso parece ter mudado desde que escrevi originalmente esta resposta. Agora, adicionar um título não altera a mensagem de validade, apenas adiciona um adendo à mensagem. O violino acima ainda se aplica.
Editar 2
Agora, o Chrome não faz nada com o atributo title do Chrome 51. Não sei em que versão isso foi alterado.
fonte
x-moz-errormessage="This field should not be left blank."
É muito simples controlar mensagens personalizadas com a ajuda do
HTML5
oninvalid
eventoAqui está o código:
fonte
Ao definir e desmarcar a
setCustomValidity
hora certa, a mensagem de validação funcionará perfeitamente.Eu usei em
onchange
vez deoninput
qual é mais geral e ocorre quando o valor é alterado em qualquer condição, mesmo através do JavaScript.fonte
onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.e
pode ser nulo, por exemplo, quando uma opção é removida de um campo React Select. Não se esqueça de verificar isso.onChange
eonInvalid
comoinputProps={{ onInvalid: …, onChange: …, }}
type='email'
é um pouco mais difícil de tratar, pois o uso desetCustomValidity
conjuntoscustomError: true
dee.target.validity
mesmo que a entrada é válida. Estou tentando encontrar uma maneira de consertar isso.Criei uma pequena biblioteca para facilitar a alteração e tradução das mensagens de erro. Você pode até alterar os textos por tipo de erro, que não está disponível
title
no momento no Chrome oux-moz-errormessage
no Firefox. Vá conferir no GitHub e dê feedback.É usado como:
Há uma demonstração disponível no jsFiddle .
fonte
Experimente este, é melhor e testado:
HTML:
JAVASCRIPT:
Demo:
http://jsfiddle.net/patelriki13/Sqq8e/
fonte
A maneira mais fácil e limpa que encontrei é usar um atributo de dados para armazenar seu erro personalizado. Teste a validade do nó e lide com o erro usando algum html personalizado.
le javascript
e alguns super HTML5
fonte
A-z
permite '[', '\', ']', '^', '_' e '' '.A solução para evitar mensagens de erro do Google Chrome ao inserir cada símbolo:
fonte
Eu tenho uma solução mais simples vanilla js only:
Para caixas de seleção:
Para entradas:
fonte
Adaptando a resposta de Salar para JSX e React, notei que o React Select não se comporta exatamente como um
<input/>
campo em relação à validação. Aparentemente, são necessárias várias soluções alternativas para mostrar apenas a mensagem personalizada e impedir que ela seja exibida em momentos inconvenientes.Eu levantei um problema aqui , se isso ajudar alguma coisa. Aqui está um CodeSandbox com um exemplo de trabalho, e o código mais importante lá é reproduzido aqui:
fonte
Ok, oninvalid funciona bem, mas mostra erro, mesmo que o usuário tenha inserido dados válidos. Então, eu usei abaixo para resolver isso, espero que funcione para você também,
oninvalid="this.setCustomValidity('Your custom message.')"
onkeyup="setCustomValidity('')"
fonte
Pode ser facilmente manipulado, basta colocar 'title' no campo:
fonte