Bom, esse post vai ser outro daqueles "coisas que ainda vou precisar, novamente"!
Esse script javascript serve para deixar o campo com uma máscara de campo decimal (ex: 99,00) conforme você vai digitando. Isso associado à CSS com text-align right, deixa bonitinho =)
Normalmente eu utilizo o plugin maskedinput para o jQuery, mas ele só trabalha com tamanhos fixos de campos, e por isso esse scritp abaixo:
Segue o script utilizado:
// Parametros: campo, separador_de_milhar, separador_decimal, evento
function maskCurrency(fld, milSep, decSep, e) {
var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13 || whichCode == 8 || 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 = fld.value.length;
for(i = 0; i < aux =" '';" len =" aux.length;" len ="=" value =" '';" len ="=" value =" '0'+" len ="=" value =" '0'+"> 2) {
aux2 = '';
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 2, len);
}
return false;
}
Quando quiser utilizar isso num campo, altere a tag alt com o valor monetario (ex: alt="monetario"), e utilize o seguinte script (em jquery) abaixo:
$(document).ready(function(){
$('input[alt="monetario"]')
.bind('keypress', function(e) { return maskCurrency(this, '', '.', e)})
.css("text-align", "right");
});
E apenas para constar, esse scriptzinho que quebra um galho também (self-explanatory):
function sonumeros(e) {
var whichCode = (window.Event) ? e.which : e.keyCode;
if( whichCode!=8 && whichCode!=0 && (whichCode<48>57)) {
return false;
}
}