Jump to content


Alan Borim

Member Since 01/04/2009
Offline Last Active 01/04/2009, 13:34
-----

Posts I've Made

In Topic: Formatar Dados Em Real (r$)

01/04/2009, 10:19

Resolvido IE + FIREFOX

O Code abaixo é uma máscara monetária que só aceita numerico. Porem so funciona perfeitamente no IE. No Mozilla ele mascara sempre 2 digitos e nao um por vez. Alguem saberia resolver? Abraços

function MM_formatMoney(_this,tamMax,teclapres) {
	var tecla = teclapres.keyCode;
	var vr = _this.value;
	vr = vr.replace( "/", "" );
	vr = vr.replace( "/", "" );
	vr = vr.replace( ",", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	tam = vr.length;
	if ( tam < tamMax && ( (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ) ) {
  if(tecla >=96 && tecla <=105) {
  tecla = tecla - 48;
	}
	vr = vr + (String.fromCharCode(tecla));
	tam +=1;
	if ( tam <= 2 ){
  _this.value = vr;
	}
	if ( (tam > 2) && (tam <= 5) ){
  _this.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam); }
  if ( (tam >= 6) && (tam <= 8) ){
 	 _this.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 9) && (tam <= 11) ){
 	 _this.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 12) && (tam <= 14) ){
 	 _this.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 15) && (tam <= 17) ){
 	 _this.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam);}
  } else if (tecla == 8 ){
  tam = tam - 1;
  _this.value = vr.substr(0,tam);
	}
	window.event.cancelBubble = true;
	window.event.returnValue = false;
}

Para testar

<input name="valor" type="text" id="valor" value="R$" onfocus="this.value='';" onkeydown="return MM_formatMoney(this,'14',event);" />



Galera o velho e chato problema de compatibilidade entre os navegadores, é um saco mesmo.

Usei esse código do Thalis, que diga-se de passagem é show, mas tava com o problema do firefox, eu dei uma olhada e achei uma solução incluindo um verificador de navegador no código, segue o trecho que resolve o problema.

navegador = /msie/i.test(navigator.userAgent);
if (navegador)
vr += String.fromCharCode(tecla);


Na instrução que inclui o número pelo seru CharCode agente faz a verificação do uso do navegador, o que eu descobri é que se não colocar esse cara no firefox o código funciona direitinho mas no ie da pau


Espero que ajude.
Abraços

IPB Skin By Virteq