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);" />