Consegui um scrip na internet pra validar e colocar máscara no campo data de nascimento de um formulário. Ele está funcionando perfeitamente, mas como o campo não é de preenchimento obrigatório gostaria que a validação somente fosse feita se o campo fosse preenchido, ou seja, se o campo estiver em branco a validação não será feita.
É possível fazer isso?
Outra coisa, além do campo data de nascimento tenho também outro campo data. A validação é feita ao clicar no botão "salvar" <input name="salvar" value="Salvar" type="submit" onClick="return validaData(cadastrodecandidatos.datanascimento);">(). Têm como validar os doi campos com o mesmo script?
Segue abaixo o script:
function validaData(str) {
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;
}
</script>Desde já agradeço a ajuda de todos.



Postagens
Male
