Normalmente opto pelo uso do jQuery Validate para validação de formulário (veja como ignorar o jQuery Validate), mas em uma tela que estava trabalhando eu tinha vários formulários que abriam em modal (usando o PrettyPhoto) e eram manipulados antes da abertura dependendo das ações do usuário naquela tela.
Ao invés de usar o validate achei que seria mais simples implementar uma função para validação, seguindo a seguinte regra:
- Os elementos com a classe "required" devem ser obrigatórios
- Adicionar a classe "error" aos elementos obrigatórios não preenchidos
- Exibir um elemento com a mensagem de erro do formulário
- Retornar true se passar na validação
A função ficou bastante simples e poderia ser escrita facilmente sem o uso do jQuery.
Validação sem plugin
function validateForm(form){
var err = 0;
form.children('.required').each(function(){
if($(this).val() == '' || $(this).val() == null){
$(this).addClass('error');
form.children('.error_form').show();
err++;
}
})
if(err == 0)
return true
}
Update
Seguindo a dica do Chris, a validação do exemplo acima pode ser substituída por uma expressão regular que verifica se a string é vazia no javascript, como no exemplo abaixo:
function notNull (x){
if(a!="" && !(a.match(/^\s+$/))){
return true;
}else{
return false;
}
}
A função segue a seguinte lógica:
- Recebe como parâmetro um objeto do jQuery (optei por isso ao invés do id ou classe pois meu código já tinha uma variável com o form selecionado por questões de performance.
- Cria uma variável chamada err com valor 0, que irá contabilizar os erros (caso exitam).
-
Percorre todos os elementos do formulário e busca pelos que tenham a classe "required", percorrendo todos estes e:
- Verifica se o valor do elemento é vazio ou null, se for adiciona a classe "error" no elemento e mostra o elemento com classe "error_form" que está no formulário (caso exista).
- Soma 1 a variável err.
- Se depois de percorrer todos os elementos com classe "required" nenhum erro for contabilizado retorna true.
Seria possível retornar também o número de erros em caso de false, modificando o final da função para:
if(err == 0)
return true
else
return err;
Sei que validação já é um assunto um pouco "manjado" de javascript e muita gente opta pelos plugins, resolvi compartilhar para mostrar como funciona e exeplificar que nem sempre é necessário a gente inserir plugin para tudo o que vamos fazer…