Eu tenho um formulário com vários conjuntos de campos diferentes. Eu tenho algum Javascript que exibe os conjuntos de campos para os usuários, um de cada vez. Para navegadores que oferecem suporte à validação de HTML5, adoraria fazer uso dele. No entanto, preciso fazer isso nos meus termos. Estou usando JQuery.
Quando um usuário clica em um link JS para passar para o próximo fieldset, preciso que a validação aconteça no fieldset atual e impeça o usuário de seguir em frente se houver problemas.
Idealmente, conforme o usuário perde o foco em um elemento, a validação ocorrerá.
Atualmente tem novalidate indo e usando Javascript. Prefere usar o método nativo. :)
fonte
$('<input type="submit">').hide().appendTo($myForm).click().remove();
form.submit()
funcionaria bem? Ou o HTML5 exige um botão de envio para validação agora?.submit()
não funciona para mim. A solução de @philfreo funciona. Hmm.TL; DR: Não se preocupa com navegadores antigos? Use
form.reportValidity()
.Precisa de suporte para navegador legado? Leia.
Na verdade, é possível acionar a validação manualmente.
Vou usar JavaScript simples em minha resposta para melhorar a capacidade de reutilização, não é necessário jQuery.
Suponha o seguinte formulário HTML:
E vamos pegar nossos elementos de IU em JavaScript:
Não precisa de suporte para navegadores legados como o Internet Explorer? Isto é para você.
Todos os navegadores modernos suportam o
reportValidity()
método emform
elementos.É isso, terminamos. Além disso, aqui está um CodePen simples usando essa abordagem.
Abordagem para navegadores mais antigos
Onde
reportValidity()
não é compatível, precisamos enganar um pouco o navegador. Então o que vamos fazer?form.checkValidity()
. Isso nos dirá se o formulário é válido, mas não mostra a IU de validação.Em código:
Este código funcionará em praticamente qualquer navegador comum (eu testei com sucesso até o IE11).
Aqui está um exemplo de CodePen funcional.
fonte
Em certa medida, você PODE
trigger
validar o formulário HTML5 e mostrar dicas ao usuário sem enviar o formulário!Dois botões, um para validar, um para enviar
Defina um
onclick
ouvinte no botão de validação para definir um sinalizador global (digamosjustValidate
) para indicar que esse clique tem como objetivo verificar a validação do formulário.E defina um
onclick
ouvinte no botão enviar para definir ojustValidate
sinalizador como falso.Em seguida, no
onsubmit
manipulador do formulário, você verifica o sinalizadorjustValidate
para decidir o valor de retorno e invoca opreventDefault()
para interromper o envio do formulário. Como você sabe, a validação do formulário HTML5 (e a dica da GUI para o usuário) é realizada antes doonsubmit
evento e, mesmo se o formulário for VÁLIDO, você pode interromper o envio do formulário retornando false ou invokepreventDefault()
.E, no HTML5 você tem um método para verificar a validação do formulário: o
form.checkValidity()
, aí você pode saber se o formulário está validado ou não no seu código.OK, aqui está a demonstração: http://jsbin.com/buvuku/2/edit
fonte
Não tenho certeza se vale a pena digitar tudo do zero, pois este artigo publicado em A List Apart faz um bom trabalho explicando isso. O MDN também tem um guia prático para formulários e validação de HTML5 (cobrindo a API e também o CSS relacionado).
fonte
Um pouco mais fácil adicionar ou remover a validação HTML5 de conjuntos de campos.
fonte
Parece que encontrei o truque: apenas remova o
target
atributo do formulário e , em seguida, use um botão de envio para validar o formulário e mostrar dicas, verificar se o formulário é válido via JavaScript e, em seguida, postar o que for. O código a seguir funciona para mim:fonte
Código HTML:
javascript (usando Jquery):
Espero que isso te ajude
fonte
fonte
Quando há um processo de validação muito complexo (especialmente assíncrono), há uma solução alternativa simples:
fonte
Outra maneira de resolver esse problema:
fonte
Uncaught TypeError: $(...).oninvalid is not a function
e não vejo isso nos documentos do jQuery.