7
respostas

qual aforma certa de chamar uma função?

fiz dois arquivos js, um que seria o principal que é onde eu apertando um botão chamaria uma function que adicionaria uma linha (tr) em uma tabela, o segundo arquivo é onde está essa função, mas por algum motivo não consigo chamar a function.

//primeiro arquivo
var jogos = document.querySelectorAll(".jogo");
for (var i = 0; i < jogos.length; i++)
{
    var jogo = jogos[i];

    var tdnota1 = jogo.querySelector(".nota1");
    var tdnota2 = jogo.querySelector(".nota2");
    var tdmedia = jogo.querySelector(".media");

    var nota1 = tdnota1.textContent;
    var nota2 = tdnota2.textContent;

    var media = (parseFloat(nota1) + parseFloat(nota2))/2;

    tdmedia.textContent = media;
}

var botao = document.querySelector("#botaoAdd");

botao.addEventListener("click", function(event){
    event.preventDefault();
    AddJogo();

})

//segundo arquivo
function AddJogo(){
    var form = document.querySelector("#botaoAdicionar");

    var titulo = form.titulo.value;
    var primeiraNota = form.nota1.value;
    var segundaNota = form.nota2.value;

    var jogoTr = document.createElement("tr");

    var tituloTd = document.createElement("td");
    var nota1Td = document.createElement("td");
    var nota2Td = document.createElement("td");
    var mediaTd = document.createElement("td");

    tituloTd.textContent = titulo;
    nota1Td.textContent = primeiraNota;
    nota2Td.textContent = segundaNota;

    jogoTr.appendChild(tituloTd);
    jogoTr.appendChild(nota1Td);
    jogoTr.appendChild(nota2Td);
    jogoTr.appendChild(mediaTd);

    var tabelaJogo = document.querySelector("#tabela");

    tabelaJogo.appendChild(jogoTr);

}
7 respostas

Fala ai Rafael, tudo bem? Você vai conseguir chamar a função AddJogo desde que ela seja importada antes do primeiro arquivo na página, para que quando o segundo arquivo for lido, a mesma já esteja declarada e disponível globalmente na máquina.

Espero ter ajudado.

Estranho que eu tentei fazer isso, mas neste caso ainda não vai, eu refiz a function e chamei ela primeiro mas nada ainda.

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <title>MemoryCard</title>
        <meta charset="utf-8">
        <link rel="stylesheet" href="CSS\reset.css">
        <link rel="stylesheet" href="CSS\style.css">
        <link rel="stylesheet" href="CSS\home.css">
    </head>
    <body>
        <header >
            <div class="cabeca">
                <h1><img src="Imagens\Sasha-amarelo.jpg"></h1>
                <ul>
                    <li><a href="MemoryCard2.0.html">Inicio</a></li>
                    <li><a href="MemoryCard2.0.html">Jogos</a></li>
                    <li>Animes</li>
                    <li><a href="Filmes.html">Filmes</a></li>
                    <li>Series</li>
                </ul>
                <div class="top-right-bar">
                    <a href="http://google.com.br/">Logar</a>
                </div>

            </div>
        </header>
        <main>
            <div class="corpo-padrao">
                <section class="propaganda">
                    <img src="Imagens\banner-propaganda.jpg">
                </section>

                <section class="tabelaContent">
                    <h2 class="titulo">Titulo da tabela teste</h2>

                    <table>
                        <thead>
                            <tr>
                                <th>Titulo</th>
                                <th>Nota 1</th>
                                <th>Nota 2</th>
                                <th>Media</th>
                            </tr>
                        </thead>
                        <tbody id="tabela">
                            <tr class="jogo">
                                <td class="ct1">Jogo 1</td>
                                <td class="nota1">8</td>
                                <td class="nota2">9</td>
                                <td class="media"></td>
                            </tr>
                            <tr class="jogo">
                                <td class="ct1">Jogo 2</td>
                                <td class="nota1">4</td>
                                <td class="nota2">6</td>
                                <td class="media"></td>
                            </tr>
                        </tbody>
                    </table>
                </section>

                <section class="AddContent">
                    <h3 class="titulo">Adicionar novo jogo:</h3>
                    <form id="botaoAdicionar">
                        <div class="grupo">
                            <label>Titulo:</label>
                            <input type="text" name="titulo" id="titulo" class="campo">                            
                        </div>
                        <div class="grupo">
                            <label>Nota 1:</label>        
                            <input type="text" name="nota1" id="nota1" class="campo">                    
                        </div>
                        <div class="grupo">
                            <label>Nota 2:</label>
                            <input type="text" name="nota2" id="nota2" class="campo">                                                        
                        </div>
                        <button class="button" id="botaoAdd">Adicionar jogo</button>
                    </form>
                </section>

                <section class="corpo">
                    <h4 class="titulo">Um site qualquer pra teste =)</h4>
                    <p>Aqui voce encontra tudo a respeito de Games, Animes, Filmes e Series! e blá blá também!</p>
                </section>
                <section class="video">
                    <h5 class="titulo">Video indicado para você:</h5>
                    <iframe width="560" height="315" src="https://www.youtube.com/embed/WeH2nuoQcYk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
                </section>
            </div>
        </main>
        <script scr="js/funcoes.js"></script>
        <script src="js/main.js"></script>
    </body>
</html>
function MontarTabela(item){
    var objetoTr = document.createElement("tr"); 

    var tituloTd = document.createElement("td");
    var nota1Td = document.createElement("td");
    var nota2Td = document.createElement("td");
    var mediaTd = document.createElement("td");

    objetoTr.appendChild(tituloTd);
    objetoTr.appendChild(nota1Td);
    objetoTr.appendChild(nota2Td);
    objetoTr.appendChild(mediaTd);

    tituloTd.textContent = item.titulo;
    nota1Td.textContent = item.primeiraNota;
    nota2Td.textContent = item.segundaNota;
    mediaTd.textContent = item.media;

    return objetoTr;
}


var jogos = document.querySelectorAll(".jogo"); for (var i = 0; i < jogos.length; i++) { var jogo = jogos[i];

var tdnota1 = jogo.querySelector(".nota1");
var tdnota2 = jogo.querySelector(".nota2");
var tdmedia = jogo.querySelector(".media");

var nota1 = tdnota1.textContent;
var nota2 = tdnota2.textContent;

var media = Media(nota1, nota2);

tdmedia.textContent = media;

}

var botao = document.querySelector("#botaoAdd");

botao.addEventListener("click", function(event){ event.preventDefault();

var tabela = document.querySelector("#tabela");

var form = document.querySelector("#botaoAdicionar");

var jogo = ObterObjeto(form);

var tabelaTr = MontarTabela(jogo);

tabela.appendChild(tabelaTr);

}) function ObterObjeto(form){ var jogo = { titulo: form.titulo.value, primeiraNota: form.nota1.value, segundaNota: form.nota2.value, media: Media(form.nota1.value, form.nota2.value) } return jogo; }

function Media(nota1, nota2){ var media = (parseFloat(nota1) + parseFloat(nota2))/2; return media; }

Se eu coloco essa function dentro do arquivo main.js vai normal, mas se eu tento chama-lo a partir do arquivo funcoes.js não vai e da o erro "Uncaught ReferenceError: MontarTabela is not defined".

Fala Rafael, nesse caso apenas olhando os códigos é bem complicado achar possíveis problemas.

Sendo assim, vou lhe pedir um favor: Compartilha o projeto completo comigo, assim eu consigo simular o problema por aqui e analisá-lo com mais calma.

Pode compartilhar através do Github ou Google Drive (zipado).

Fico no aguardo.

Fala Rafael, fiz o teste no projeto e aqui funcionou certinho, abri o arquivo MemoryCard2.0.html, preenchi o nome do jogo, a nota 1 e nota 2, cliquei no botão para adicioná-lo e o mesmo foi incluido na tabela sem problema nenhum.

Qual problema você tem por ai?

Espero ter ajudado.

deve ser algum tipo de Bug do meu PC, os exercícios que eu fiz no curso do java-script funcionaram. Neste arquivo que mandei tem duas telas, a inicial (que é onde eu tenho o problema) e um outra chamada de Filmes, quando eu tento usar uma função de outro arquivo nessa tela de Filmes vai certinho, mas quando eu tento usar uma função de outro arquivo (chamado funcoes.js) da tela inicial da um erro como se não encontrasse essas funções, aparece ("Uncaught ReferenceError: Media is not defined).

Fala Rafael, pode ser por conta de navegador ou versão do navegador.

Eu testei no Google Chrome na última versão (mais recente).

Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software