Weblosofia com CSS, Jquery, Javascript, Ajax, PHP etc.
por Alexandre Magno
Postado em Julho 23rd, 2008 por Alexandre Magno
Depois de ter mostrado o Ajax Form Plugin, como prometido irei falar neste post sobre o Plugin para jQuery Validate.
O Validate é um plugin para o jQuery que permite que você possa centralizar todas as validações de dados no formulário, tanto no cliente como no servidor. Neste post irei falar sobre a validação no cliente somente.
Este é um dos plugins mais antigos e o mais completo na minha opinião. Você pode controlar todas as validações, mensagens e ainda ter a possibilidade de facilmente criar novos métodos de validação. Além de tudo, ele é integrado com o Ajax Form Plugin para que os dados enviados com sucesso seja enviado por Ajax.
Irei mostrar o funcionamento básico deste plugin na prática:
Neste exemplo, há um formulário com os campos nome, idade, e-mail e país. Esses campos não foram usados por acaso. O campo nome foi usado para mostrar como é simples a validação de campos que precisam ser preenchidos com algum valor. No campo idade irei ilustrar como criar um novo método para o Plugin, neste caso o usuário tem que ter mais de 18 anos. No campo e-mail irei mostrar como pode ser usado os métodos já definidos no plugin. O campo país mostra como validar selects, radios e checkboxes.
As mensagens de erro e como elas irão serem mostradas são totalmente personalizáveis, tanto onde e como elas irão aparecer tanto como no CSS. Por padrão, o plugin irá gerar um label logo depois do campo com a classe error. Isso pode ser modificado em suas configurações facilmente. Além do label, o input do elemento que não foi validado corretamente também irá ter uma classe error.
Vamos ao código HTML do formulário:
<form name="validate" id="validate" action="validate.html" method="post"> <label for="nome">Nome:</label> <input type="text" name="nome" /> <label for="idade">Idade:</label> <input type="text" name="idade" /> <label for="email">E-mail:</label> <input type="text" name="email" /> <label for="pais">País:</label> <select type="text" name="pais"> <option value="">Selecione</option> <option value="brasil">Brasil</option> <option value="canada">Inglaterra</option> </select> <input type="submit" value="Validar" /> </form>
Assim, o estilo da classe de erro ficaria:
label.error {
border: 1px solid red;
color: red;
font-weight: bold;
padding: 3px;
background-color: #99CCFF;
margin: 6px 0;
width: 120px;
text-align: center;
}
Note que foi passado o elemento label para estilizar somente a classe error aplicada a algum label e não o elemento input.
Depois de fazer o download do plugin, você poderá utilizar o seguinte código no head do documento abaixo do arquivo referente ao core do jQuery:
$(function(){
$("#validate").validate({
submitHandler: function(form) {
$(form).submit(function(){
alert('todos os dados foram preenchidos corretamente');
return false
});
},
rules: {
nome: 'required',
idade: {
required: true,
minAge: 18
},
email: {
required: true,
email: true
},
pais: 'required'
},
messages: {
nome: 'Você não preencheu seu nome',
idade: {
required: 'Você não preencheu sua idade',
},
email: {
required: 'Você precisa preencher um e-mail',
email: 'Endereço de e-mail não válido'
},
pais: 'Você precisa escolher um país'
}
});
});
Irei explicar passo a passo o código:
Primeiro, você passa um seletor para referenciar um formulário(neste caso o id do formulário) e executa o método validate, que aceita um objeto de parâmetros:
No caso da regra minAge eu criei um novo método de validação:
jQuery.validator.addMethod("minAge", function(value, element, params) {
return this.optional(element) || value > params;
}, "Você precisa ter mais de 18 anos.");
Esta é a sintaxe para criação de novos métodos para o Validate. Primeiro você atribui um nome para o método (para ser usado dentro do objeto rule) e passa uma função que retorna um valor Booleano para verificar se a validação confere. O primeiro parâmetro é o valor digitado ou escolhido pelo usuário(no caso do input, o valor digitado e do select, o valor escolhido). O segundo parâmetro é o elemento que está sendo validado (Elemento DOM) e o terceiro é o parâmetro passado na regra de validação. No caso da validação de idade, o primeiro parâmetro é a idade que o usuário digitou, o segundo é o input e o terceiro é o valor inserido na regra. Sendo assim ele verifica primeiro se o parâmetro é opcional, por que caso seja, ele não precisa validar e o segundo verifica se o valor digitado é maior que o valor atribuido na regra (você pode, por exemplo, colocar na regra que a idade seja maior que 21).
O ideal é colocar todas as regras de validação personalizadas em um arquivo javascript separado e inserir logo depois do plugin Validate.
Com a validação de selects, checkboxes e radio buttons é possível trabalhar da mesma forma que um input. No caso do select, o value colocado para o option "Selecione um país " é vazio, sendo assim ele não irá passar com sucesso na validação.
Espero que tenha ajudado a todos e não se esqueçam de olharem a documentação, experimentar e colocar em prática para descobrir todas as funcionalidades do Plugin.
Artigos relacionados
André Faria Gomes comentou:
24th Julho, 2008 às 12:55 pm
Ótima dica!
Gostaria de sugerir um post sobre plugins de mascara do jQuery.
Riccardo Benetti comentou:
8th Agosto, 2008 às 2:58 pm
Cara valeu pelo artigo. Me ajudou muito.
Parabéns mesmo.
Abs
xc comentou:
17th Setembro, 2008 às 4:00 pm
bom post se seu site tiver sido feito com essa tecnologia ela deve ser boa mesmo
Alexandre Magno comentou:
24th Setembro, 2008 às 11:23 am
@tiago: Realmente tiago, está ocorrendo um erro de script que está impedindo o funcionamento. Vou dar uma olhada para descobrir o motivo e atualizo aqui quando tiver descobrido a solução.
fabio comentou:
12th Novembro, 2008 às 4:37 pm
cara, estou migrando aos poucos para jquery e esta excelente seu artigo.
ai vai minha duvida… no prototype, tem um plugin de validacao tb, mas nele, assim que o usuário sai do campo o plugin informa logo o erro. Nesse plugin tem isso?
Outra coisa… no prototype, eu posso setar um campo como validação de data, mas não obrigatório. Testei isso no plugin do jquery e nao achei… se eu coloco somente um tipo de validação, sem que ela seja obrigatória, ele continua me obrigando a por algo no campo..
valeu!
Mateus comentou:
5th Dezembro, 2008 às 7:30 pm
O exemplo que passou (link) a validação não funciona
Alexandre Magno comentou:
6th Dezembro, 2008 às 3:55 pm
@Mateus: Testei os links e eles estão funcionando normalmente. Qual link não está funcionando? Abraços
Felipe comentou:
17th Março, 2009 às 7:48 pm
Não funciona em campos tipo file
Coleção de métodos para o plugin validate do jQuery. | TidBits comentou:
27th Março, 2009 às 11:30 am
[…] o plugin, principalmente para desenvolver interface de back end, com diversas validações. Tem um post do Alexandre Magno antigo, porém muito bom, explicando o que é o plugin, o que faz, como utilizá-lo e um exemplo […]
Coleção de métodos para o plugin validate do jQuery. | juliowebdesign.com comentou:
3rd Abril, 2009 às 1:37 pm
[…] o plugin, principalmente para desenvolver interface de back end, com diversas validações. Tem um post do Alexandre Magno antigo, porém muito bom, explicando o que é o plugin, o que faz, como utilizá-lo e um exemplo […]
4th Abril, 2009 às 8:46 pm
[…] práticas, Plugins, jQuery avançado, Jquery Já expliquei em posts anteriores como usar o validade e como usar o Ajax Form. Agora irei mostrar como os dois em conjunto oferece uma solução completa […]
ALexandre Broggio comentou:
11th Abril, 2009 às 10:47 am
O plugin e muito mesmo facilica muito na hora de validar forms ^_^
Alexandre Magno comentou:
14th Abril, 2009 às 1:05 pm
@felipe. A validação em campos file realmente não é possível por padrão. De acordo com o criador do plugin, com um método adicional isto é possível:
jQuery.validator.addMethod(”accept”, function(value, element, param) {
return value.match(new RegExp(”.” + param + “$”));
});
rules: {
fileupload: { accept: “(jpe?g|gif|png)” }
}
Marcelo comentou:
29th Abril, 2009 às 3:15 pm
sou leigo ainda, e estou com uma dúvida esse script vai fazer uma consulta em cada letra que digitar no campo ?
Alexandre Magno comentou:
30th Abril, 2009 às 9:31 am
@Marcelo: Não. Ele fará a consulta ao enviar o formulário ou quando o usuário sair do campo (evento blur) se for especificado nas suas opções. Espero que tenha ajudado e boa sorte.
Fabiane comentou:
29th Maio, 2009 às 1:34 pm
Alexandre,
Parabéns pelo seu exemplo. Excelente mesmo!
Só tenho uma dúvida:
Preciso fazer uma validação de senha de forma que a senha anterior não possa ser igual a nova senha. Além do mais, a senha nova tem que ter um caracter em UPPER e pelo menos 3 números.
Vc tem idéia de como fazer?
Obrigada!
Alexandre Magno comentou:
1st Junho, 2009 às 8:31 pm
@Fabiane: Existe um método incluído no validate chamado ‘equalTo’ que faz o inverso, você pode usá-lo como referência para criar um personalizado, como explicado no post. O link para a sintaxe é http://docs.jquery.com/Plugins/Validation/Methods/equalTo. Eu sugeria que você pudesse criar um método ‘diferentTo’. O código seria basicamente este:
diferentTo: function(value, element, param) {
return value != $(param).val();
}
A sintaxe seria a mesma do equalTo, você passa o elemento que ele deseja verificar se é diferente.
Espero ter ajudado, boa sorte e fico muito feliz que o exemplo tenha sido útil.
Os seguintes campos estão incorretos ou faltando