Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leandro Nigre

[Resolvido] Validação de 3 campos de data

Recommended Posts

[RESOLVIDO]

Pessoal, não entendo muito de java, mas peguei um código pronto para validação de campos de data e o adaptei à minha página, funcionando corretamente. O problema é que tenho 3 campos de data e ele só funciona quandoi aplicado a um dos três, e não a todos. Tento duplicar a função alterando o nome do campo, mas não rola. Certamente eu to fazendo algo errado. Vou postar meu code e quem puder me dê uma luz.

 

// FORMULÁRIO
<form action="resultado_noticia.php" method="get" name="busca" id="form" onSubmit="return validaForm()">


// CRIA CAMPOS
<script>
cont= new Array();
cont[0] = '<label for="ncampo" ></label> <input type="text" name="data" size="10" maxlength="10" id="ncampo">';
cont[1] = '<label for="ncampo"></label> <input type="text" name="datain" size="10" maxlength="10" id="ncampo" />e<input type="text" name="dataout" size="10" maxlength="10" id="ncampo" />';
cont[2] = '';
function inserir(id,n){
document.getElementById(id).innerHTML = cont[n];
}
</script>
				  
<input name="Radio2" type="radio" id="Radio2" value="todos" checked="checked" onClick="inserir('ncampo', '2')"/>
<input name="Radio2" type="radio" id="Radio2" onClick="inserir('ncampo', '0')" value="exata" />
<input type="radio" name="Radio2" id="Radio2" value="periodo" onClick="inserir('ncampo', '1')" />


// FUNÇÃO APLICADA APENAS AO CAMPO DATA. 
<script>
function validaForm(){
d = document.busca;
	// valida exata
	erro=0;
	hoje = new Date();
	anoAtual = hoje.getFullYear();
	barras = d.data.value.split("/");
	if (barras.length == 3){
		dia = barras[0];
		mes = barras[1];
		ano = barras[2];
		resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));
		if (!resultado) {
			alert("Preencha o campo data no formato dd/mm/aaaa.");
			d.data.focus();
			return false;
		}
	} else {
		alert("Preencha o campo data no formato dd/mm/aaaa.");
		d.data.focus();
		return false;
	}
	return true;
}
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

VOCÊ CRIOU A FUNÇÃO E INSERIUR EM UM CAMPO, COPIE ESSA FUNÇÃO E MODIFIQUE O NOME EXEMPLO:

 

NA DATA_INICIO, FUNÇÃO MASCARA1 QUE LEVA NOS VALUES A DATA_INICIO, AGORA PARA A DATA_TERMINO MASCARA2 QUE LEVA OS VALUES DATA_TERMINO.

 

 

QUALQUER COISA AVISE...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi cakanilo, como meus campos de data chamam-se data, datain e dataout, tentei fazer conforme o code abaixo, mas continua com o mesmo problema. Só funciona a validação do campo data.

 

function validaForm(){

d = document.busca;

// valida exata

erro=0;

hoje = new Date();

anoAtual = hoje.getFullYear();

barras = d.data.value.split("/");

if (barras.length == 3){

dia = barras[0];

mes = barras[1];

ano = barras[2];

resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));

if (!resultado) {

alert("Preencha o campo data no formato dd/mm/aaaa.");

d.data.focus();

return false;

}

} else {

alert("Preencha o campo data no formato dd/mm/aaaa.");

d.data.focus();

return false;

}

 

// valida data periodo de entrada

erro=0;

hoje = new Date();

anoAtual = hoje.getFullYear();

barras = d.datain.value.split("/");

if (barras.length == 3){

dia = barras[0];

mes = barras[1];

ano = barras[2];

resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));

if (!resultado) {

alert("Preencha o campo data no formato dd/mm/aaaa.");

d.datain.focus();

return false;

}

} else {

alert("Preencha o campo data no formato dd/mm/aaaa.");

d.datain.focus();

return false;

}

 

// valida data periodo de saida

erro=0;

hoje = new Date();

anoAtual = hoje.getFullYear();

barras = d.dataout.value.split("/");

if (barras.length == 3){

dia = barras[0];

mes = barras[1];

ano = barras[2];

resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));

if (!resultado) {

alert("Preencha o campo data no formato dd/mm/aaaa.");

d.dataout.focus();

return false;

}

} else {

alert("Preencha o campo data no formato dd/mm/aaaa.");

d.dataoutn.focus();

return false;

}

 

return true;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

segue o script e preste atenção nos campos DT_Inicio e DT_Termino:

 

 

// Mascara para data inicio

 

 

function mascara_data1(DT_Inicio){

var mydata1 = '';

mydata1 = mydata1 + DT_Inicio;

if (mydata1.length == 2){

mydata1 = mydata1 + '/';

document.forms[0].DT_Inicio.value = mydata1;

}

if (mydata1.length == 5){

mydata1 = mydata1 + '/';

document.forms[0].DT_Inicio.value = mydata1;

}

if (mydata1.length == 10){

verifica_data();

}

}

 

function verifica_data () {

 

dia = (document.forms[0].DT_Inicio.value.substring(0,2));

mes = (document.forms[0].DT_Inicio.value.substring(3,5));

ano = (document.forms[0].DT_Inicio.value.substring(6,10));

 

situacao = "";

// verifica o dia valido para cada mes

if ((dia < 01)||(dia < 01 || dia > 30) && ( mes == 04 || mes == 06 || mes == 09 || mes == 11 ) || dia > 31) {

situacao = "falsa";

}

 

// verifica se o mes e valido

if (mes < 01 || mes > 12 ) {

situacao = "falsa";

}

 

// verifica se e ano bissexto

if (mes == 2 && ( dia < 01 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) {

situacao = "falsa";

}

 

if (document.forms[0].DT_Inicio.value == "") {

situacao = "falsa";

}

 

if (situacao == "falsa") {

alert("Data inválida, informe outra data!");

document.forms[0].DT_Inicio.focus();

}

}

 

// Mascara para data termino

 

 

 

function mascara_data2(DT_Termino){

var mydata2 = '';

mydata2 = mydata2 + DT_Termino;

if (mydata2.length == 2){

mydata2 = mydata2 + '/';

document.forms[0].DT_Termino.value = mydata2;

 

}

 

if (mydata2.length == 5){

mydata2 = mydata2 + '/';

document.forms[0].DT_Termino.value = mydata2;

}

if (mydata2.length == 10){

verifica_data();

}

 

 

function verifica_data () {

 

dia = (document.forms[0].DT_Termino.value.substring(0,2));

mes = (document.forms[0].DT_Termino.value.substring(3,5));

ano = (document.forms[0].DT_Termino.value.substring(6,10));

 

situacao = "";

// verifica o dia valido para cada mes

if ((dia < 01)||(dia < 01 || dia > 30) && ( mes == 04 || mes == 06 || mes == 09 || mes == 11 ) || dia > 31) {

situacao = "falsa";

}

 

// verifica se o mes e valido

if (mes < 01 || mes > 12 ) {

situacao = "falsa";

}

 

// verifica se e ano bissexto

if (mes == 2 && ( dia < 01 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) {

situacao = "falsa";

}

 

if (document.forms[0].DT_Termino.value == "") {

situacao = "falsa";

}

 

if (situacao == "falsa") {

alert("Data inválida, informe outra data!");

document.forms[0].DT_Termino.focus();

 

}

}

 

// Verifica se a data termino está vazia

if (mydata2 == "") {

alert("Informe uma Data Termino!");

document.forms[0].DT_Termino.focus();

}

 

 

// Verifica se a data termino é menor que a data inicio

if (mydata2 < mydata1) {

alert("Data termino não pode ser menor que dara inicio!");

document.forms[0].DT_Termino.focus();

}

 

 

 

Agora acho que isso vai te ajudar ele poem as mascaras e averigua se a data é aceita e vê se o ano é bisesto.

 

Qualquer dúvida posta a pergunta e diga de deu certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vou testar seu code agora... Só pra me certificar. A função verifica_data (), que você usa duas vezes, uma para o DT_Inicio e outra para o DT_termino, deve ser colocada como OnSubmit do formulario ne?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não consegui fazer a sua máscara funcionar... Será que com a minha máscara dá pra usar seu code de validação?

 

 

// Formulario

<form action="resultado_noticia.php" method="get" name="busca" id="form" onSubmit="verifica_data()">

<input type="text" name="data" size="10" maxlength="10" OnKeyUp="mascaraData(this);" />;

 

// minha mascara data

function mascaraData(campoData){

var data = campoData.value;

if (data.length == 2){

data = data + '/';

document.forms[0].data.value = data;

return true;

} if (data.length == 5){

data = data + '/';

document.forms[0].data.value = data;

return true;

}

}

 

// verifica data

function verifica_data () {

dia = (document.busca[0].campoData.value.substring(0,2));

mes = (document.busca[0].campoData.value.substring(3,5));

ano = (document.busca[0].campoData.value.substring(6,10));

situacao = "";

 

// verifica o dia valido para cada mes

if ((dia < 01)||(dia < 01 || dia > 30) && ( mes == 04 || mes == 06 || mes == 09 || mes == 11 ) || dia > 31) {

situacao = "falsa";

}

 

// verifica se o mes e valido

if (mes < 01 || mes > 12 ) {

situacao = "falsa";

}

 

// verifica se e ano bissexto

if (mes == 2 && ( dia < 01 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) {

situacao = "falsa";

}

 

if (document.forms[0].campoData.value == "") {

situacao = "falsa";

}

 

if (situacao == "falsa") {

alert("Data inválida, informe outra data!");

document.forms[0].campoData.focus();

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, eu chamo a mascara dentro do proprio campo:

 

<input type="text" name="data" size="10" maxlength="10" OnKeyUp="mascaraData(this);" />;

 

 

E no form eu chamo apenas a função de validação:

 

<form action="resultado_noticia.php" method="get" name="busca" id="form" onSubmit="verifica_data()">

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu ver se eu entendi..

 

DT_Inicio e DT-Termino são os campos de formulario onde se insere a data, certo?

 

Como chamar essa máscara? É assim mesmo: OnKeyUp="mascara_data1(this);" como propriedade de DT_Inicio?

 

E a função de validação verifica_data () ? Você chama ela como OnSubmit do Form?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui adaptar sua máscara e sua função de validação à minha página, mas só por meio de OnSubmit. Mas acho que o seu code deveria executar a função de validação tão logo se completasse 10 caracteres no campo data, não é? Como não executa, fiz com OnSubmit mesmo, mas estou tendo o mesmo problema que vinha tendo com meu code.

 

Se faço duas funções de validação com nomes diferentes e tento inseri-las no form assim: onSubmit="return validaFormIN();validaFormOUT();" ele executa somente a primeira.

 

Se faço como no seu code, com duas funções com nome igual (no caso a function verifica_data ()) ele executa somente a segunda, que é o ultimo code...

 

Será que o problema é pelo fato dos 2 campos não serem fixos? Eles são criados assim:

 

cont= new Array();

 

cont[0] = '<label for="ncampo" class="style42">Dia</label> <input type="text" class="admin_form10" name="data" size="10" maxlength="10" id="ncampo" OnKeyUp="mascaraData(this);" />';

cont[1] = '<label for="ncampo"></label> <input type="text" class="admin_form10" name="datain" size="10" maxlength="10" id="ncampo" OnKeyUp="mascaraDataIN(this);" /> <span class="style42">e</ span> <input type="text" class="admin_form10" name="dataout" size="10" maxlength="10" id="ncampo"OnKeyUp="mascaraDataOUT(this);" />';

 

function inserir(id,n){

document.getElementById(id).innerHTML = cont[n];

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

[RESOLVIDO]

Consegui validar meus três campos de data, não sei se da meneira correta, mas o importante é que funcionam.

Como meus campos aparecem de acordo com a seleção de botões de radio (1 radio faz aparecer campo data, e outro radio faz aparecer campos data_inicio e data_termino), fiz o seguinte:

 

A função que valida o campo data coloquei como OnSubmit do form;

E a função que valida o campo data_inicio, que por dua vez, executa também a função data_termino, coloquei com OnClick do botão submeter do formulario.

 

Valew pela ajuda cakanilo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.