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