function MascaraMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){ var sep = 0; var key = ''; var j = 0; var i = 0; var len2 = 0; var len = 0; var strCheck = '0123456789'; var aux2 = ''; var aux = ''; var whichCode = (window.Event) ? e.which : e.keyCode; //alert(whichCode); if (whichCode == 13 || whichCode == 8 || whichCode == 9 || whichCode == 0) return true; key = String.fromCharCode(whichCode); // Valor para o código da Chave if (strCheck.indexOf(key) == -1) return false; // Chave inválida len = objTextBox.value.length; for(i = 0; i < len; i++) if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i); aux += key; len = aux.length; if (len == 0) objTextBox.value = ''; if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux; if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux; if (len > 2) { aux2 = ''; for (j = 0, i = len - 3; i >= 0; i--) { if (j == 3) { aux2 += SeparadorMilesimo; j = 0; } aux2 += aux.charAt(i); j++; } objTextBox.value = ''; len2 = aux2.length; for (i = len2 - 1; i >= 0; i--) objTextBox.value += aux2.charAt(i); objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len); } return false; }
ela funciona belezinha... POREM, tentei altera-la pra funcionar com apenas 1 casa decimal, e me atrapalhei... alguem tem uma funçao similar que trabalha com apenas 1 casa decimal?
exemplo de uso
<input value="" name="nota" style="text-align:right; onKeyPress="return(MascaraMoeda(this,'','.',event))" onKeyDown="if(this.value.length > 4){this.value = this.value.substring(1,5)}" onKeyUp="if(this.value.length > 4){this.value = this.value.substring(1,5)}" type="text" size="2" >
abraços
Edição feita por: Stormbringer, 20/05/2010, 17:09.