Change Coin Mask Function - Different Erase Way

Asked

Viewed 63 times

0

I have this mask function:

function MascaraMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, 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) 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 && len < 12) {
        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;
}

It works, but here’s the thing, I type 50,00 If I blacked out I’d like her to stay that way 05,00, this way that it’s working it erases, and stays like this 50,0, I’ve tried some things, but without success.

1 answer

2


Look, not to be the pain in the ass that just throws a code here as a solution without explaining anything, but I think the code in that mask is unnecessarily large and hard to read. May I suggest using something simpler? Without frameworks, I believe this satisfies your requirement:

document.getElementById('inp').addEventListener('input', e => {
    const val = e.target.value.replace(/\D/g, '').replace(/^0*/, '').padStart(3, '0')
    e.target.value = val.slice(0, -2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.') + ',' + val.slice(-2)
})
<input id="inp">

Edit

I added decimal separator.

  • Would you have some way of putting him in function or would have to add the id of each component I would like to use this mask?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.