Ir para conteúdo
Fórum Script Brasil
  • 0

Função De Máscarar Data Só Funciona No Ie E No Ff Não.


Guest Igor

Pergunta

Amigos eu estou precisando de uma ajuda dos senhores.

Eu criei duas funções javascript porém as mesmas só estão funcionando no IE mas no FF não. Vocês poderiam me ajudar a fazer essas funçõies funcionarem tanto no IE como no FF?

A primeira função coloca uma máscara na data dd/mm/aaaa

function mascararData(data){
   if(data.value.length == 2){
     data.value += "/";
   } else if (data.value.length == 5) {
    data.value += "/";
   } 
}
A segunda função permite apenas o dígito de caracteres numéricos
function apenas_numero(objEvent) 
{
var iKeyCode;   
iKeyCode = objEvent.keyCode;   
if(iKeyCode>=48 && iKeyCode<=57) return true;
return false;
}

Chamada das funções

onKeyPress="mascararData(this); return apenas_numero(event);"

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Amigos criei uma página para simular o erro:

<html>
<head>
<script>
/**********************    MASCARA DATA    **********************/
// colocar no campo do formulário o comando onKeyPress="mascararData(this);"
function mascararData(data){
   if(data.value.length == 2){
     data.value += "/";
   } else if (data.value.length == 5) {
    data.value += "/";
   } 
}
/**********************    APENAS NÚMEROS    **********************/
function apenas_numero(objEvent) 
{
var iKeyCode;   
iKeyCode = objEvent.keyCode;   
if(iKeyCode>=48 && iKeyCode<=57) return true;
return false;
} 

</SCRIPT>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>teste de função dd/mm/aaaa</title>
</head>

<body>
  teste de função 
  <input name="txt_nascimento"  onKeyPress="mascararData(this);return apenas_numero(event);" size="35" maxlength="10" tabindex="6">dd/mm/aaaa 
    
</body>
</html>

Link para o comentário
Compartilhar em outros sites

  • 0

o problema ai está na funcao apenas_numeros enta tente substituir por esta:

function apenas_numero(evento)
{
var tecla;
    if(window.event) { // Internet Explorer
        tecla = event.keyCode;
    }
    else { // Firefox
        tecla = evento.which;
    }    

  if(tecla == 0 || tecla >= 48 && tecla <= 57) return true;
      return false;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Andrea pelo menos agora eu consigo escrever e realmente só aceita número mas eu se eu escrever um número errado não consigo apagar ele não aceita o backspace. você saberia o que é?

Link para o comentário
Compartilhar em outros sites

  • 0

poizeh Igor, mas o problema do backspace é por causa da funcao da mascara.. a forma que o usuario tem é de selecionar tudo e dar um del.

bom se eu achar uma solucao mais decente eu te aviso

[editando]

então, tem uma funcao de mascaras que funcionou mas é beeeeeeeeem maior que a sua.

<script>
//MÁSCARA DE VALORES

function txtBoxFormat(objeto, sMask, evtKeyPress) {
    var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;


if(document.all) { // Internet Explorer
    nTecla = evtKeyPress.keyCode;
} else if(document.layers) { // Nestcape
    nTecla = evtKeyPress.which;
} else {
    nTecla = evtKeyPress.which;
    if (nTecla == 8) {
        return true;
    }
}

    sValue = objeto.value;

    // Limpa todos os caracteres de formatação que
    // já estiverem no campo.
    sValue = sValue.toString().replace( "-", "" );
    sValue = sValue.toString().replace( "-", "" );
    sValue = sValue.toString().replace( ".", "" );
    sValue = sValue.toString().replace( ".", "" );
    sValue = sValue.toString().replace( "/", "" );
    sValue = sValue.toString().replace( "/", "" );
    sValue = sValue.toString().replace( ":", "" );
    sValue = sValue.toString().replace( ":", "" );
    sValue = sValue.toString().replace( "(", "" );
    sValue = sValue.toString().replace( "(", "" );
    sValue = sValue.toString().replace( ")", "" );
    sValue = sValue.toString().replace( ")", "" );
    sValue = sValue.toString().replace( " ", "" );
    sValue = sValue.toString().replace( " ", "" );
    fldLen = sValue.length;
    mskLen = sMask.length;

    i = 0;
    nCount = 0;
    sCod = "";
    mskLen = fldLen;

    while (i <= mskLen) {
      bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/") || (sMask.charAt(i) == ":"))
      bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

      if (bolMask) {
        sCod += sMask.charAt(i);
        mskLen++; }
      else {
        sCod += sValue.charAt(nCount);
        nCount++;
      }

      i++;
    }

    objeto.value = sCod;

    if (nTecla != 8) { // backspace
      if (sMask.charAt(i-1) == "9") { // apenas números...
        return ((nTecla > 47) && (nTecla < 58)); } 
      else { // qualquer caracter...
        return true;
      } 
    }
    else {
      return true;
    }
  }


function apenas_numero(evento)
{
var tecla;
	if(window.event) { // Internet Explorer
		tecla = event.keyCode;
	}
	else { // Firefox
		tecla = evento.which;
	}	

  if(tecla == 0 || tecla >= 48 && tecla <= 57) return true;
	  return false;
}

</script>
<input type="text" name="data" onkeypress="return txtBoxFormat(this, '99/99/9999', event); return apenas_numero(event);" maxlength="10">

[/editando]

Link para o comentário
Compartilhar em outros sites

  • 0

Eu também tinha visto que só funcionaria se ele selecionasse tudo ele conseguiria apagar com o Del mas é interessante conseguir apagar utilizando o backspace também. Mas de qualquer forma já me ajudou muito.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Rodrigo --

Andreia, Igor verifiquei o código dos dois e notei que mesmo que deixem só a função que retorna apenas número já está dando erro quando se ua o backspace, não é a função de mascarar que está dando o erro não. Estou precisando da mesma função e também não estou corrigindo esse erro. Se alguém puder nos ajudar. Seria de grande ajuda. AT+

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal,

primeira participação no forum.

Resolvi o problema do Firefox, IE e Netscape. ( Testei o código e esta funcionando perfeito, até o backspace )

Também mudei o código para document.getElementById

O problema do backspace foi resolvido com um If que no caso do Firefox nem executa o script e apaga o conteudo do input.

O Código ficou assim:

<script>
function txtBoxFormat(strField, sMask, evtKeyPress) {
    var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;
    
    if(document.all) { // Internet Explorer
        nTecla = evtKeyPress.keyCode; 
    }
    else if(document.layers) { // Nestcape
        nTecla = evtKeyPress.which;
    } 
    else if(document.getElementById) { // FireFox
        nTecla = evtKeyPress.which;
    }
    
    if (nTecla != 8) { 
    
    sValue = document.getElementById(strField).value;
    
    // Limpa todos os caracteres de formatação que
    // já estiverem no campo.
    sValue = sValue.toString().replace( "-", "" );
    sValue = sValue.toString().replace( "-", "" );
    sValue = sValue.toString().replace( ".", "" );
    sValue = sValue.toString().replace( ".", "" );
    sValue = sValue.toString().replace( "/", "" );
    sValue = sValue.toString().replace( "/", "" );
    sValue = sValue.toString().replace( "(", "" );
    sValue = sValue.toString().replace( "(", "" );
    sValue = sValue.toString().replace( ")", "" );
    sValue = sValue.toString().replace( ")", "" );
    sValue = sValue.toString().replace( " ", "" );
    sValue = sValue.toString().replace( " ", "" );
    sValue = sValue.toString().replace( ":", "" );
    fldLen = sValue.length;
    mskLen = sMask.length;
    
    i = 0;
    nCount = 0;
    sCod = "";
    mskLen = fldLen;
    
    while (i <= mskLen) {
    bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/"))
    bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))
    bolMask = bolMask || (sMask.charAt(i) == ":")
    
    if (bolMask) {
    sCod += sMask.charAt(i);
    mskLen++; }
    else {
    sCod += sValue.charAt(nCount);
    nCount++;
    }
    
    i++;
    }
    
    //objForm[strField].value = sCod;
    document.getElementById(strField).value = sCod;
    
    if (nTecla != 8) { // backspace
        if (sMask.charAt(i-1) == "9") { // apenas números...
            return ((nTecla > 47) && (nTecla < 58)); } // números de 0 a 9
        else { // qualquer caracter...
            return true;
        } 
    }
    else {
        return true;
    }
    }
} 
</script>

O input fica assim:

<input name="telefoneresidencial" type="text" id="telefoneresidencial" onKeyPress="return txtBoxFormat('telefoneresidencial', '(99) 9999-9999', event);" maxlength="14"/>

Falou abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...