Ir para conteúdo

POWERED BY:

Arquivado

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

FabianoSouza

Máscara CNPJ está aceitando letras

Recommended Posts

Encontrei este código para aplicar máscara de CNPJ (apenas a máscara, não a validação).

A máscara é criada no padrão "00.000.000/0000-00" mas infelizmente está aceitando letras também.

 

Essa é função que deveria permitir apenas números. Algo está errado nela e quero a ajuda dos colegas.

// ##### FUNÇÃO PERMITIR APENAS NÚMEROS #####
function onlyNumber(e)
{
    var charCode = (e.which) ? e.which : event.keyCode;
	
	if (charCode > 31 && (charCode < 48 || charCode > 57))
		return false;
	return true;
}

Essa é a function que cria a máscara (está funcionando).

/////////////// FORMATA CAMPO CNPJ ///////////////////////////////
function FormataCnpj(campo, teclapres)
{
  var tecla = teclapres.keyCode;
  var vr = new String(campo.value);
  vr = vr.replace(".", "");
  vr = vr.replace("/", "");
  vr = vr.replace("-", "");
  tam = vr.length + 1;
  if (tecla != 14)
  {
	if (tam == 3)
		campo.value = vr.substr(0, 2) + '.';
	if (tam == 6)
		campo.value = vr.substr(0, 2) + '.' + vr.substr(2, 5) + '.';
	if (tam == 10)
		campo.value = vr.substr(0, 2) + '.' + vr.substr(2, 3) + '.' + vr.substr(6, 3) + '/';
	if (tam == 15)
		campo.value = vr.substr(0, 2) + '.' + vr.substr(2, 3) + '.' + vr.substr(6, 3) + '/' + vr.substr(9, 4) + '-' + vr.substr(13, 2);
			}
		}

Chamo a function assim

 

<input type="text" onkeyup="FormataCnpj(this,event)"/>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa aí:

<html>
    <head>
        <title>Test Mask</title>
        <script type="text/javascript">
            
            function getObj( element )
            {
                var obj = false;
                
                if( document.all )
                {
                    if( document.all[ element ] )
                    {
                        obj = document.all[ element ];
                    }
                }
                else
                {
                    if( document[ element ] )
                    {
                        obj = document[ element ];     
                    }
                    else if( document.getElementById( element ) )
                    {
                        obj = document.getElementById( element );
                    }
                }
                
                return obj;
            }
            
            function Mask( obj )
            {
                var object = this;
                
                this.cpf = function( obj )
                {
                    obj.value = obj.value
                    .replace( /\D/g, '' )
                    .replace( /(\d{3})(\d)/, '$1.$2' )
                    .replace( /(\d{3})(\d)/, '$1.$2' )
                    .replace( /(\d{3})(\d{1,2})$/, '$1-$2' );
                    
                    setTimeout( this.object.cpf( obj ), 1 );
                }
                this.cnpj = function( obj )
                {
                    obj.value = obj.value
                    .replace( /\D/g, '' )                          
                    .replace( /^(\d{2})(\d)/, '$1.$2' )
                    .replace( /^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3' )
                    .replace( /\.(\d{3})(\d)/, '.$1/$2' )
                    .replace( /(\d{4})(\d)/, '$1-$2' );
                    
                    setTimeout( this.object.cnpj( obj ), 1 );
                }
            }
            
            window.onload = function( )
            {
                var mask = new Mask( );
                getObj( 'cpf' ).onkeyup = function( ){ mask.cpf( this ); }
                getObj( 'cnpj' ).onkeyup = function( ){ mask.cnpj( this ); }
                
            }
        </script>
    </head>
    <body>
        <form method="post" action="">
            <label>CPF: </label>
            <input type="text" id="cpf" maxlength="14" />
            <br/>
            <label>CNPJ: </label>
            <input type="text" id="cnpj" maxlength="18" />
        </form>
    </body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah Carlos. Quando implementei não funfou.

Fiz o testes e vi que o lance é no trecho window.onload

 

Em minha página chamo uma function (que apenas abre um alert, mais nada) no body onload.

Ao que parece está havendo conflito.

 

Como faço para mudar a maneira de chamar a function? Ou compatibilizar com a function que já chamo no body onload?

 

 

Para ilustrar...

        <script>
        function fnTeste()
		{
			alert("dsdsd")
		}
        </script>
    </head>
    <body onLoad="fnTeste()">

Como falei, se chamar algo no onload do body, sua função deixa de funcionar.

 

Como posso contornar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

window.onload = function(){} e <body onload = "myFunc( );"> são maneiras diferentes de usar o mesmo evento.

 

Porquê não usar apenas window.onload?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem razão.

Estava com esta ressalva porque tenho umas páginas (que vão precisar da máscara) que carregam uma function que (por algum motivo que ainda desconheço) só funciona no evento load do body. Mas é algum problema no meu código, preciso verificar.

 

Mas voltado ao caso. Coloquei a function do alert no window.load e blz. Tudo certo.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, achei o enrrosco heheh

 

Alterei o trecho da sua function

            window.onload = function( )

para

            function aplicaMascara( )

E no body fiz assim

<body onload="carrega_menu(); aplicaMascara();">

Pronto.

15zsigi.jpg

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.