Weblosofia com CSS, Jquery, Javascript, Ajax, PHP etc.
por Alexandre Magno
Postado em Janeiro 22nd, 2008 por Alexandre Magno
Vou falar neste post sobre um plugin para jQuery que deve ser aprendido como parte de sua documentação: o jQuery form plugin
Ele é muito útil para enviar formulário usando ajax, além de controlar a validação client-side de maneira triunfante. Se você não tem idéia de como usar o jQuery para pegar os valores do formulário de uma maneira fácil para ser passado pelo método $.post do jQuery, ou usa o método value() para fazer isto, depois deste plugin você vai fazer isto de uma maneira muito mais eficiente.
Para vocês entenderem o que estou falando, acessem este link: http://www.alexandremagno.net/portfolio_dev/site/contato. Tentem enviar o formulário sem preencher nenhum campo, ou deixando campos vazios e e-mail incorretos. O formulário fez a validação de uma maneira bonita, simples e intuitiva. Isto pode ser totalmente configurado para o plugin, a imaginação é o limite
.
Preencha corretamente o formulário e envie(aproveite e deixe uma mensagem para mim
). Ele foi enviado usando ajax, com todos os campos passados para o jQuery, processados pelo php, retornado pelo XML e devolvido ao usuário. Tudo feito pelo plugin. Tentem enviar também sem preencher algum campo ou digitar um e-mail não válido, ele irá mostrar uma validação eficiente e personalizável.
Se deseja então pegar os valores do formulário via javascript para passar para o php com o ajax, além disso tudo externamente, sem usar scripts inline, esta é a solução ideal. Vou colocar o script aqui e explicar o seu código. Não se esqueça que os passos necessários para ele funcionar não ilustrei aqui por ser bastante trivial e ter abordado em outros posts, como inserir no head a framework jQuery e o plugin, que pode ser baixado no seguinte endereço:
Vamos ao código:
$("#carregando").hide(); $("#carregando").ajaxStart(function(){ $(this).fadeIn('fast'); $('#erro_form').fadeOut('fast'); }); $("#carregando").ajaxStop(function(){ $(this).fadeOut('fast'); }); //validando o formulário $('#erro_form').hide(); function validar(formData,jqForm,options) { var check = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/; var nome = $('input[@name=nome]').fieldValue(); var email = $('input[@name=email]').fieldValue(); var assunto = $('input[@name=assunto]').fieldValue(); var mensagem = $('textarea[@name=mensagem]').fieldValue(); var status = ""; if(!nome[0]) { status += ' <li>O nome está vazio</li> '; } if(!email[0]) { status += ' <li>E-mail vazio</li> '; } if(!check.test(email[0])) { status+=' <li>E-mail inválido</li> '; } if(!assunto[0]) { status += ' <li>O campo assunto está vazio</li> '; } if(!mensagem[0]) { status += ' <li>O campo mensagem está vazio</li> '; } if(status!="") { $('#erro_form ul').empty(); $('#erro_form').fadeIn('slow'); $('#erro_form ul').append(status); return false; } } // Callback do retorno do ajax; function resultado(responseText,statusText) { $('#erro_form').empty().hide(); var resultado = $('resposta',responseText).text(); if(resultado) { $('#erro_form').append(' e-mail enviado com sucesso, aguarde que entrarei em contato ').fadeIn('slow'); } else { $('#erro_form').append(' Não foi possível enviar o e-mail ').fadeIn('slow'); } $('#form_contato').resetForm(); } $('#form_contato').ajaxForm({ url: '/portfolio_dev/site/enviar', beforeSubmit: validar, dataType: 'xml', success: resultado, type: 'POST' });
Tudo que foi visualizado e executado no formulário de contato mostrado foi feito com este código.
Vamos a explicação:
No próximo post irei mostrar como seria enviado este mesmo formulário utilizando o ajaxForm em conjunto com o validate.
Rangel Viotti comentou:
10th Fevereiro, 2008 às 10:17 am
Cavalheiros. Tudo muito legal mas eu tenho uma única dúvida:
se eu tivesse vários…
Selecione
Opção 01
Opção 02
Opção 03
Opção 04
Opção 05
Opção 06
Opção 07
Como eu poderia usar o jquery para validar as option lists????
admin comentou:
11th Fevereiro, 2008 às 8:19 am
@Rangel: Eu não testei com o ajaxForm, mas seria o mesmo raciocínio de um input, use o método fieldValue que retornará um array de opções.
Hebert comentou:
27th Março, 2008 às 10:38 am
Parabéns pelo post.
No caso, aguardo se novo artigo utilizando jform com jvalidate, pois estou penando para trabalhar com os dois em conjunto…
admin comentou:
27th Março, 2008 às 11:47 am
@Hebert: Obrigado cara, desculpe pela demora, vou ver se adianto ele para publicar neste fim de semana…
Odilon comentou:
28th Abril, 2008 às 10:40 pm
Excelente artigo Alexandre. Muito bom o exemplo. Como faço para copia-lo ? Quando uso copy/paste, vem junto várias linhas com “#” no inicio.
Grato, Odilon
admin comentou:
29th Abril, 2008 às 12:18 pm
Estou indo dar uma reformada no blog e irei instalar o plugin para visualizar o texto “puro” (plain text). Peço desculpas.
Mas o legal é você digitar o código e personalizar a sua maneira, assim fica melhor de aprender, isto falo por experiência própria…
De qualquer forma, estou dando uma reforma geral no blog para melhorar certos aspectos de acordo com o feedback de vocês.
Abraços e obrigado!
Odilon comentou:
1st Maio, 2008 às 12:15 pm
Claro, você está certissimo. Foi só uma pequena preguiça.
Mas tenho algumas dúvidas; sou um velho dinossauro, inexperiente em Web, naveguei por seu site (muito bem feito, por sinal) e verifiquei que você utiliza o CakePHP. Não conheço essa ferramenta, mas deve ser muito interessante e como também não conheço o jQuery, gostaria de entender algumas coisas:
A URL de acesso ao seu site é:”http://www.alexandremagno.net”, que logo encaminha para “/portfolio_dev/site.”
Bom, o link para a página de contato é fácil de identificar:
admin comentou:
5th Maio, 2008 às 10:14 am
@Odilon: Muito obrigado cara. Aquele site foi a primeira experiência que tive com o cakePHP e aprendi que só com a mão na massa para aprender as coisas. O encaminhamento da URL se deve a estrutura de diretórios mesmo, por que tenho o blog e o site. Mas o cakePHP trabalha com urls deste tipo. portfolio_dev é onde fica o site e a pasta site é um ‘controller’ que dispara uma ação (index subentendida). Compliquei? A estrutura de url do cakePHP é sempre na forma ‘/controler/action/restante’. Difícil explicar muito com um comentário só :-). Você pode dar uma olhada em http://www.cakephp.com.br/ . Espero ter ajudado. Abraços e boa sorte!
Odilon comentou:
5th Maio, 2008 às 11:11 pm
Eu quem agradeço Alexandre. Seus posts são muito úteis.
Meu formulário de envio de email já está ativo !!! Sem cakePHP… mas funcionando!
Abusando, reparei que sempre que há algum erro no jQuery, por exemplo numa chamada com parâmetros inválidos, ficamos sem saber o que está acontecendo.
Tem como ligar algum “debug” ou algo semelhante, para acompanhar o que está acontecendo e facilitar a depuração de erros?
Outra dúvida, não consigo enviar emails com a função nativa mail(). Meu provedor não aceita envio de emails sem autenticação. Qual função com autenticação de emails você sugere ? Estou em dúvidas quanto à phpMailer e a mimemessage.
Grato, Odilon
admin comentou:
6th Maio, 2008 às 10:58 am
Esse erro no jQuery acho que se deve por que a página é atualizada e justamente o script se “perde” neste tempo. eu já usei o phpMailer e achei muito bom.
Espero ter ajudado e obrigado pela confiança.
Eduardo de Souza comentou:
23rd Maio, 2008 às 10:35 am
Olá amigo adorei o plugin, agora só fiquei com um problema, não sei se vcs já tiverão, o meu retorno é um arquivo Excel, é eu não estou encontrando uma solução para o retorno, quando eu retorno para um DIV ele joga o arquivo todo bagunçado nele. Se poder me ajudar vai ser de um bom agrado, + foi excelente essa solução.
Ruben Zevallos Jr. comentou:
2nd Junho, 2008 às 2:25 am
Cheguei aqui procurando informações sobre Formulários com AJAX e encontrei mais que isso… vou dar uma lida e participar com comentários
Ruben Zevallos Jr. comentou:
2nd Junho, 2008 às 3:16 am
Parece que o http//www.malsup.com/jquery/form/ não está no ar…
Tiago comentou:
1st Julho, 2008 às 12:16 am
ola não entendi algumas coisas, eu tenho que puxar o jquery-form.js na minha pagina e tb adicionar este codigo que, vc colocou, e o form como fica??
quando eu tento acessar este link da um erro:
http://www.malsup.com/jquery/form/
nos exemplos que eu vi não tem o mesmo codigo q vc citou, pq?
obrigado
admin comentou:
2nd Julho, 2008 às 9:56 am
@Tiago: O link as vezes fica fora do ar. Você precisa do js no plugin logo após o jQuery e depois ter um código para a página que contém o formulário que você deseja validar. Mas isto é um script / tutorial para aprender como faz.
Boa sorte e abraços…
Tiago comentou:
3rd Julho, 2008 às 12:29 pm
hum entendi, vou tentar aqui vlwww
parabens pelo tutorial ficou mto bom
obrigado
Os seguintes campos estão incorretos ou faltando