Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

<input onkeyup='formataValor(this)'> // RefErro: formataValor is not defined

Boa tarde! Estou chamando a function formataValor diretamente no elemento input HTML, mas aparece o erro:

Uncaught ReferenceError: formataValor is not defined at HTMLInputElement.onkeyup (depositar.html:46)

HTML (depositar.html):

<input type="text" name="deposito" id="valorDeposito" onkeyup="formataValor(this)" placeholder="Ex: 50,00" required>

JavaSCript (depositar.js):

function formataValor(i) {
    var v = i.value.replace(/\D/g,'');
    v = (v/100).toFixed(2) + '';
    v = v.replace(".", ",");
    v = v.replace(/(\d)(\d{3})(\d{3}),/g, "$1.$2.$3,");
    v = v.replace(/(\d)(\d{3}),/g, "$1.$2,");
    i.value = v;
}

O script depositar.js está sendo devidamente chamado no depositar.html:

<script type="module" src="./scripts/depositar.js"></script>

A chamada da função formataValor só deu certo usando addEventListener:

document.querySelector('#valorDeposito').addEventListener('keyup', function () {
    var v = this.value.replace(/\D/g,'');
    v = (v/100).toFixed(2) + '';
    v = v.replace(".", ",");
    v = v.replace(/(\d)(\d{3})(\d{3}),/g, "$1.$2.$3,");
    v = v.replace(/(\d)(\d{3}),/g, "$1.$2,");
    this.value = v;
})

Mas gosteria de entender por que não funciona quando chamo ela diretamente no elemento HTML com 'onkeyup'.

Alguém pode me ajudar? Coloquei meu projeto no GitHub, caso precise:

https://github.com/torezani89/formulario-main-3

1 resposta
solução!

Fala Bruno, tudo bem? Espero que sim!

O problema é que não é possivel utilizar funções de arquivos que possuem type="module", pois as funções desse tipo de arquivo não ficam disponiveis globalmente, então para chamar alguma função de algum arquivo, esse arquivo não deve possuir type como module.

Espero ter ajudado, abraços e bons estudos :D