Jump to content


acdestefani

Member Since 04/11/2004
Offline Last Active 04/12/2009, 08:07
-----

Posts I've Made

In Topic: Validar Campo Data Somente Se O Campo Foi Preenchido

03/12/2009, 09:42

Finalmente funcionou!

O problema estava nesse trecho (str.value.length != 8). Substitui o 8 por 10 e agora tá funcionando. Provavelmente ele estava contando a barra tbm.

Estava assim:
if (str.value.length == 0) {
        return true;
}

if (str.value.length != 8) {
        return false;
}
Ficou assim:
if (str.value.length == 0) {
        return true;
}

if (str.value.length != 10) {
        return false;
}
Se digito qualquer data que não esteja no formato dd/mm/aaaa e clico em salvar ele não faz nada, nem aparece mensagem de erro, mas se digito no formato correto ele grava.

Deixo aqui os meus sinceros agradecimentos, em especial ao Paulo por não medir esforços para me ajuda.

Abraços

In Topic: Validar Campo Data Somente Se O Campo Foi Preenchido

03/12/2009, 09:09

Obrigado pela ajuda amigos!
Paulo substitui esse novo código e não funcionou, não fez nenhuma validação e nem a máscara apareceu mais. Será que fiz algo errado?
Quando a sugestão do Alex, funciona da seguinte forma:

Se utilizo essa parte do código:

if (str.value.length == 0) {
return true;
}

funciona corretamente.

Mas como quero permitir a inclusão da data com oito dígitos, já explicado anteriormente, ao mudar o trecho acima para:
if (str.value.length == 0) {
return true;
} else {
if (str.value.length != 8) {
return false;
}
}

ele para de funcionar.

In Topic: Validar Campo Data Somente Se O Campo Foi Preenchido

02/12/2009, 14:37

Segue anexo o arquivo sehapcadcand.php, que é referente ao cadastro de candidatos. Abaixo segue o conteúdo do arquivo ValidaData.js.

function validaFormulario() {
        if (!validaData(document.forms.cadastrodecandidatos.datanascimento)) {
                return false;
        }
        
        if (!validaData(document.forms.cadastrodecandidatos.datanascimentoconj)) {
                return false;
        }

        if (!validaData(document.forms.cadastrodecandidatos.datainscricao)) {
                return false;
        }
}

function validaData(str) { 

if (str.value.length == 0) {
        return true;
} 
	dia = (str.value.substring(0,2)); 
        mes = (str.value.substring(3,5)); 
 	ano = (str.value.substring(6,10)); 

	cons = true; 
	
	// verifica se foram digitados números
	if (isNaN(dia) || isNaN(mes) || isNaN(ano)){
		alert("Preencha a data somente com números."); 
		str.value = "";
		str.focus(); 
		return false;
	}
		
    // verifica o dia valido para cada mes 
    if ((dia < 01)||(dia < 01 || dia > 30) && 
		(mes == 04 || mes == 06 || 
		 mes == 09 || mes == 11 ) || 
		 dia > 31) { 
    	cons = false; 
	} 

	// verifica se o mes e valido 
	if (mes < 01 || mes > 12 ) { 
		cons = false; 
	} 

	// verifica se e ano bissexto 
	if (mes == 2 && ( dia < 01 || dia > 29 || 
	   ( dia > 28 && 
	   (parseInt(ano / 4) != ano / 4)))) { 
		cons = false; 
	} 
    
	if (cons == false) { 
		alert("A data inserida não é válida: " + str.value); 
		str.value = "";
		str.focus(); 
		return false;
	} 
}

// colocar no evento onKeyUp passando o objeto como parametro
function formata(val)
{
   	var pass = val.value;
	var expr = /[0123456789]/;
		
	for(i=0; i<pass.length; i++){
		// charAt -> retorna o caractere posicionado no índice especificado
		var lchar = val.value.charAt(i);
		var nchar = val.value.charAt(i+1);
	
		if(i==0){
		   // search -> retorna um valor inteiro, indicando a posição do inicio da primeira
		   // ocorrência de expReg dentro de instStr. Se nenhuma ocorrencia for encontrada o método retornara -1
		   // instStr.search(expReg);
		   if ((lchar.search(expr) != 0) || (lchar>3)){
			  val.value = "";
		   }
		   
		}else if(i==1){
			   
			   if(lchar.search(expr) != 0){
				  // substring(indice1,indice2)
				  // indice1, indice2 -> será usado para delimitar a string
				  var tst1 = val.value.substring(0,(i));
				  val.value = tst1;				
 				  continue;			
			   }
			   
			   if ((nchar != '/') && (nchar != '')){
				 	var tst1 = val.value.substring(0, (i)+1);
				
					if(nchar.search(expr) != 0) 
						var tst2 = val.value.substring(i+2, pass.length);
					else
						var tst2 = val.value.substring(i+1, pass.length);
	
					val.value = tst1 + '/' + tst2;
			   }

		 }else if(i==4){
			
				if(lchar.search(expr) != 0){
					var tst1 = val.value.substring(0, (i));
					val.value = tst1;
					continue;			
				}
		
				if	((nchar != '/') && (nchar != '')){
					var tst1 = val.value.substring(0, (i)+1);

					if(nchar.search(expr) != 0) 
						var tst2 = val.value.substring(i+2, pass.length);
					else
						var tst2 = val.value.substring(i+1, pass.length);
	
					val.value = tst1 + '/' + tst2;
				}
   		  }
		
		  if(i>=6){
			  if(lchar.search(expr) != 0) {
					var tst1 = val.value.substring(0, (i));
					val.value = tst1;			
			  }
		  }
	 }
	
     if(pass.length>10)
		val.value = val.value.substring(0, 10);
	 	return true;
}

In Topic: Validar Campo Data Somente Se O Campo Foi Preenchido

02/12/2009, 10:28

Infelizmente ainda não deu certo. Já testei no Firefox e no Internet Explorer e dá o mesmo problema. Se digito uma data inválida ele mostra a mensagem de erro e se não digito nada no campo data ele consegue gravar o registro. Isso é justamente o que eu queria e tá funcionando corretamente.
O problema acontece quando digito uma data válida e clico no botão salvar, aí não acontece nada, fica a mesma tela.

In Topic: Validar Campo Data Somente Se O Campo Foi Preenchido

01/12/2009, 10:17

Obrigado pela ajuda Paulo! Infelizmente ainda não deu certo. Quando não preencho nenhum dos campos data e clico no botão salvar o registro é salvo corretamente e quando preencho algum deles e clico em salvar não acontece nada: No meu formulário coloquei assim:

<form method="post" action="sehapcadcandconf.php" name="cadastrodecandidatos" onsubmit="return validaFormulario();">

Meu script tá assim:

function validaFormulario() {
        if (!validaData(cadastrodecandidatos.datanascimento)) {
                return false;
        }
        
        if (!validaData(cadastrodecandidatos.datanascimentoconj)) {
                return false;
        }

        if (!validaData(cadastrodecandidatos.datainscricao)) {
                return false;
        }
}

function validaData(str) { 

if (str.value.length == 0) {
        return true;
} else {
        if (str.value.length != 8) {
                return false;
        }
}

	dia = (str.value.substring(0,2)); 
        mes = (str.value.substring(3,5)); 
 	ano = (str.value.substring(6,10)); 

	cons = true; 
	
	// verifica se foram digitados números
	if (isNaN(dia) || isNaN(mes) || isNaN(ano)){
		alert("Preencha a data somente com números."); 
		str.value = "";
		str.focus(); 
		return false;
	}
		
    // verifica o dia valido para cada mes 
    if ((dia < 01)||(dia < 01 || dia > 30) && 
		(mes == 04 || mes == 06 || 
		 mes == 09 || mes == 11 ) || 
		 dia > 31) { 
    	cons = false; 
	} 

	// verifica se o mes e valido 
	if (mes < 01 || mes > 12 ) { 
		cons = false; 
	} 

	// verifica se e ano bissexto 
	if (mes == 2 && ( dia < 01 || dia > 29 || 
	   ( dia > 28 && 
	   (parseInt(ano / 4) != ano / 4)))) { 
		cons = false; 
	} 
    
	if (cons == false) { 
		alert("A data inserida não é válida: " + str.value); 
		str.value = "";
		str.focus(); 
		return false;
	} 
}

// colocar no evento onKeyUp passando o objeto como parametro
function formata(val)
{
   	var pass = val.value;
	var expr = /[0123456789]/;
		
	for(i=0; i<pass.length; i++){
		// charAt -> retorna o caractere posicionado no índice especificado
		var lchar = val.value.charAt(i);
		var nchar = val.value.charAt(i+1);
	
		if(i==0){
		   // search -> retorna um valor inteiro, indicando a posição do inicio da primeira
		   // ocorrência de expReg dentro de instStr. Se nenhuma ocorrencia for encontrada o método retornara -1
		   // instStr.search(expReg);
		   if ((lchar.search(expr) != 0) || (lchar>3)){
			  val.value = "";
		   }
		   
		}else if(i==1){
			   
			   if(lchar.search(expr) != 0){
				  // substring(indice1,indice2)
				  // indice1, indice2 -> será usado para delimitar a string
				  var tst1 = val.value.substring(0,(i));
				  val.value = tst1;				
 				  continue;			
			   }
			   
			   if ((nchar != '/') && (nchar != '')){
				 	var tst1 = val.value.substring(0, (i)+1);
				
					if(nchar.search(expr) != 0) 
						var tst2 = val.value.substring(i+2, pass.length);
					else
						var tst2 = val.value.substring(i+1, pass.length);
	
					val.value = tst1 + '/' + tst2;
			   }

		 }else if(i==4){
			
				if(lchar.search(expr) != 0){
					var tst1 = val.value.substring(0, (i));
					val.value = tst1;
					continue;			
				}
		
				if	((nchar != '/') && (nchar != '')){
					var tst1 = val.value.substring(0, (i)+1);

					if(nchar.search(expr) != 0) 
						var tst2 = val.value.substring(i+2, pass.length);
					else
						var tst2 = val.value.substring(i+1, pass.length);
	
					val.value = tst1 + '/' + tst2;
				}
   		  }
		
		  if(i>=6){
			  if(lchar.search(expr) != 0) {
					var tst1 = val.value.substring(0, (i));
					val.value = tst1;			
			  }
		  }
	 }
	
     if(pass.length>10)
		val.value = val.value.substring(0, 10);
	 	return true;
}

Tô achando um pouco complicado fazer essa validação, principalmente por ser iniciante. Será que fica mais fácil trabalhar com data igual é feito no cadastro do fórum, onde existe uma caixa para selecionar o dia, outra para o mês e uma para o ano?

Mais uma vez muito obrigado pela ajuda.

IPB Skin By Virteq