Mask Currency Input readonly

0

I would like to know how I can be putting coin mask, since my input="fieldResult" is blocked and added value automatically after putting a value in the above input.

I tried to add the mask in the input="fieldResult", but without success.

Thank you!

<!DOCTYPE html>
<html lang="pt-br">
  <head>
    <title>Título da página</title>
    <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
        <link href="https://fonts.googleapis.com/css?family=Titillium+Web" rel="stylesheet">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.11/jquery.mask.min.js"></script>

        <script>
function troca(valor){
var campo1 = document.getElementById("ncorridas").value;
var resultado = parseFloat(campo1);
resultado = resultado*5400;
document.getElementById('campoResultado').value = ('R$ ') + resultado + (' reais por ano!');
}
</script>
<b>Número de corridas por dia <input class="w3-input w3-border" type="number" name="ncorridas" id="ncorridas" min="0" onChange="troca(this.value)" />
  </head>
  <body>
    Valor:<input readonly="true" class="w3-input w3-border" type="text" name="campoResultado" id="campoResultado" /></b>
  </body>
</html>
    
asked by anonymous 18.07.2018 / 05:41

1 answer

1

Converting numbers to currency without a framework

1 - Solution taking advantage of your script

With just 3 more lines of pure javascript in your function you get the expected result.

function troca(valor){
var campo1 = document.getElementById("ncorridas").value;
var resultado = parseFloat(campo1);
//formata para duas casas decimais utilizando notação de ponto fixo
resultado = (resultado*5400).toFixed(2);
//substitui separador decimal ponto por virgula
resultado=resultado.replace(".", ",");
//a regex abaixo coloca um ponto a esquerda de cada grupo de 3 digitos desde que não seja no inicio do numero
resultado = resultado.replace(/\B(?=(\d{3})+(?!\d))/g, ".");

document.getElementById('campoResultado').value = ('R$ ') + resultado + (' por ano!');
}
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link href="https://fonts.googleapis.com/css?family=Titillium+Web" rel="stylesheet">
<b>Número de corridas por dia <input class="w3-input w3-border" type="number" name="ncorridas" id="ncorridas" min="0" onChange="troca(this.value)" />
  </head>
  <body>
    Valor:<input readonly="true" class="w3-input w3-border" type="text" name="campoResultado" id="campoResultado" /></b>

2 - For modern browsers use toLocaleString() - Converts a number to a string using the current or specified locale.

To format the value in Moeda set. toLocaleString() with minimumFractionDigits and maximumFractionDigits

  • minimumFractionDigits - displays the fractional part with the minimum number of digits.
  • maximumFractionDigits - displays the fractional part with maximum number of digits.

const [corridas, Valor] = [...document.querySelectorAll('input.w3-border')];
       
       function formatar$(moeda) {
          return moeda.toLocaleString('pt-BR',{style: 'currency', currency: 'BRL'}, {
          minimumFractionDigits: 2,
          maximumFractionDigits: 2
          });
       }


       corridas.addEventListener('keyup', function() {
         const moeda = Number(this.value);
         const _Valor = moeda * 5400;
         Valor.value = formatar$(_Valor) + ' por ano';
       });
       
    <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
    <link href="https://fonts.googleapis.com/css?family=Titillium+Web" rel="stylesheet">

    <b>Número de corridas por dia <input class="w3-input w3-border" type="number" name="ncorridas" id="ncorridas" min="0"/>

    Valor:<input readonly="true" class="w3-input w3-border" type="text" name="campoResultado" id="campoResultado" /></b>
  

I removed the word reais from the result because the symbol R$ already exists, but it is up to you!

    
18.07.2018 / 08:36