Jump to content


Photo

Validação Jquery


  • Faça o login para participar
8 replies to this topic

#1 knoxville

knoxville

    Backdoor Man

  • Usuários
  • 951 posts
  • Sexo:Masculino
  • Localidade:Itajaí - SC

Posted 02/08/2010, 23:06

Fala pessoal, tudo bem?

Estou com um problema que é o seguinte... Estou fazendo um formulário de contato que tem uma validação.
A validação está funcionando corretamente (ele muda a cor dos inputs enquanto preencho), porém clicando no botão enviar, ele envia o formulário, independente de ter ou não erros no preenchimento.

Alguém consegue me ajudar a achar o erro?
contato.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />
<script language="JavaScript" src="jquery.js" type="text/javascript"></script>
<script language="JavaScript" src="validation.js" type="text/javascript"></script>
</head>
<body>				
<form method="post" action="" id="customForm">
<label>Seu nome:</label>
<input name="nome" type="text" id="nome" size="30"><br>
<label>Seu e-mail:</label>
<input name="email" type="text" id="email" size="30"><br>
<label>Assunto:</label>
<input name="assunto" type="text" id="assunto" size="30"><br>
<label>Mensagem:</label>
<textarea name="mensagem" rows="8"></textarea><br>
<label>&nbsp;</label>
<input type="submit" value="Enviar mensagem" id="enviar" name="enviar">
</form>
</body>
</html>
validation.js
$(document).ready(function(){
	var form = $("#customForm");
	var nome = $("#nome");
	var email = $("#email");
	var assunto = $("#assunto");
	var mensagem = $("#mensagem");
	
	nome.blur(validateNome);
	email.blur(validateEmail);
	assunto.blur(validateAssunto);
	mensagem.blur(validateMensagem);
	
	name.keyup(validateNome);
	email.keyup(validateEmail);
	assunto.keyup(validateAssunto);
	mensagem.keyup(validateMensagem);
	
	form.submit(function(){
		if(validateNome() & validateEmail() & validateAssunto() & validateMensagem()){
			return true;
		} else {
			return false;
		}
	});
	
	function validateEmail(){
		var a = $("#email").val();
		var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
		if(filter.test(a)){
			email.removeClass("error");
			return true;
		}
		else{
			email.addClass("error");
			return false;
		}
	}
	function validateNome(){
		if(nome.val().length < 4){
			nome.addClass("error");
			return false;
		}
		else{
			nome.removeClass("error");
			return true;
		}
	}
	function validateAssunto(){
		if(assunto.val().length < 4){
			assunto.addClass("error");
			return false;
		}
		else{
			assunto.removeClass("error");
			return true;
		}
	}
	function validateMessage(){
		if(message.val().length < 10){
			mensagem.addClass("error");
			return false;
		}
		else{			
			mensagem.removeClass("error");
			return true;
		}
	}
});
style.css
#customForm input[type=text] {
	width:300px;
	padding:5px;
	margin:3px 0px;
	color: #949494;
	border: 1px solid #cecece;
	font-family: Arial,  Verdana, Helvetica, sans-serif;
}
#customForm input[type=text].error{
	background: #f8dbdb;
	border-color: #e77776;
}
#customForm textarea {
	width:300px;
	padding:5px;
	margin:3px 0;
	color: #949494;
	border: 1px solid #cecece;
	font-family: Arial,  Verdana, Helvetica, sans-serif;
}
#customForm textarea.error{
	background: #f8dbdb;
	border-color: #e77776;
}

Muito obrigado!

#2 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 03/08/2010, 09:58

O operador & é diferente do operador &&

Faz um teste:

if(validateNome() && validateEmail() && validateAssunto() && validateMensagem()){


(y)
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#3 knoxville

knoxville

    Backdoor Man

  • Usuários
  • 951 posts
  • Sexo:Masculino
  • Localidade:Itajaí - SC

Posted 03/08/2010, 13:19

André Manoel, continua enviando! :(

Edição feita por: knoxville, 03/08/2010, 13:20.


#4 Édipo Costa Rebouças

Édipo Costa Rebouças

    Veterano

  • Ex-Admins
  • 1079 posts
  • Sexo:Masculino
  • Localidade:Brasil - São Paulo

Posted 03/08/2010, 13:29

Creio que o problema seja em relação ao escopo(tempo de vida) das variaveis,

Você declarou as variaveis dentro de uma função, então elas só vão existir enquanto a função estiver rodando, no caso desta função(função anônima), ela só vai rodar no evento ready e depois já era, as variaveis e tudo mais não existira.

troque o lugar da declaração das variaveis de:

$(document).ready(function(){
        var form = $("#customForm");
        var nome = $("#nome");
        var email = $("#email");
        var assunto = $("#assunto");
        var mensagem = $("#mensagem");


para
        var form;
        var nome;
        var email;
        var assunto;
        var mensagem;

$(document).ready(function(){
        form = $("#customForm");
        nome = $("#nome");
        email = $("#email");
        assunto = $("#assunto");
        mensagem = $("#mensagem");

quando vc usa a palavra "var" vc esta declarando a variavel, então se você declara uma variavel dentro de uma função, ela só vai existir dentro daquela função(escopo). Neste caso, declaramos as variveis fora da função, nisso elas viram variveis globais, podendo ser usadas e setadas em qualquer lugar do script.

#5 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 03/08/2010, 13:35

É tudo erro de digitação. No if você chamou validateMensagem, mas definiu a função como validateMessage. As variáveis nome e mensagem algumas vezes aparecem como name e message. E no textarea você definiu o name, quando devia definir o id.

-----

Sobre o post aqui de cima, o escopo de variáveis no javascript funciona de uma maneira bem diferente da tradicional, vamos dizer assim. O que ele fez ali, por mais estranho que pareça, está correto.

Edição feita por: LeoB, 03/08/2010, 13:37.


#6 Édipo Costa Rebouças

Édipo Costa Rebouças

    Veterano

  • Ex-Admins
  • 1079 posts
  • Sexo:Masculino
  • Localidade:Brasil - São Paulo

Posted 03/08/2010, 13:43

LeoB, realmente, eu não tinha visto a bizarri-se de se declarar uma função dentro de uma função anonima, pensei que estava fora

#7 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 03/08/2010, 13:54

Funções em javascript são praticamente tipos de dados. Podem ser atribuídas a variáveis, passadas como parâmetro pra outras funções e coisas do tipo. É bizarro mesmo. Mas extremamente útil também, se entendido corretamente.

#8 Édipo Costa Rebouças

Édipo Costa Rebouças

    Veterano

  • Ex-Admins
  • 1079 posts
  • Sexo:Masculino
  • Localidade:Brasil - São Paulo

Posted 03/08/2010, 14:10

Eu não acho bizarro, eu só disse que do modo como ele usou é bizarro. realmente é extremamente util a orientação a objetos que o JavaScript suporta.

knoxville, já que vc já esta usando o jQuery, aproveita o plugin jQuery Validation, bem confiavel

#9 knoxville

knoxville

    Backdoor Man

  • Usuários
  • 951 posts
  • Sexo:Masculino
  • Localidade:Itajaí - SC

Posted 03/08/2010, 16:23

LeoB, funcionou! :D é que eu fui "traduzindo" o exemplo do tutorial e acabei esquecendo algumas partes. Além do mais, a falta do id="mensagem" no textarea também tava atrapalhando! Muito obrigado! :D

Édipo Costa Rebouças, até tinha começado a usar mas seilah, depois vi esse tutorial e achei mais simples e ficava mais do jeito que eu queria! :P

valeu galera!




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq