Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Ativar script após a inclusão de um html ou componente

Boa tarde a todos, Sou um novo estudante aqui no alura e estou gostando muito do curso FRONT-END. Tenho a intenção de fazer um portal para a empresa a qual trabalho e gostaria de fazer uma pagina fixa (master page assim chamado no asp.net). Mal aprendi a criar um hello world e já estou querendo algo avançado :). Quero incluir uma pagina ou um componente para dentro de uma 'div' da pagina principal, estou utilizando o 'innerHTML', acredito que essa não seria uma boa maneira. Já tentei usar também o 'createElement' junto com o 'append' mas não tive sucesso. Segue o meu objetivo: Na pagina principal tenho um botão e quando eu clico no mesmo, vai ser adicionado no 'div' da pagina um html com uma tabela. O problema vem agora, eu tenho um evento click já escrito no index.js. Eu preciso saber se o clique foi efetuado na tabela ou não. Esse evento não funciona depois que entra o html. Onde estou errando? Eu tenho que recarregar o arquivo index.js? obs.: estou utilizando o css e js do bootstrap para enfeitar a tabela.

index.html

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head>
<body>
    <button id="botaoPrincipal">Clica aqui</button>
    <div class="espacoTabela"></div>

    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    <script src="index.js"></script>
</body>
</html>

index.js

$("#botaoPrincipal").click((event) => {
    var espacoTabela = document.querySelector(".espacoTabela");
    espacoTabela.innerHTML = '<table class="table table-dark tabela"><thead><tr><th scope="col">#</th><th scope="col">First</th><th scope="col">Last</th><th scope="col">Handle</th></tr></thead><tbody><tr><th scope="row">1</th><td>Mark</td><td>Otto</td><td>@mdo</td></tr><tr><th scope="row">2</th><td>Jacob</td><td>Thornton</td><td>@fat</td></tr><tr><th scope="row">3</th><td>Larry</td><td>the Bird</td><td>@twitter</td></tr></tbody></table>';
});

$(".tabela").click((event) => {
    event.preventDefault();
    console.log("Cliquei na tabela");
})
3 respostas
solução!

Boa tarde, Felipe! Como vai?

Pelo que entendi o problema é em relação ao click na tabela, correto? Então, isso acontece pq no momento que vc adiciona o ouvinte do evento de click a tabela ainda não existe.

Tente fazer assim e veja se funciona:

$("#botaoPrincipal").click((event) => {
    var espacoTabela = document.querySelector(".espacoTabela");
    espacoTabela.innerHTML = '<table class="table table-dark tabela"><thead><tr><th scope="col">#</th><th scope="col">First</th><th scope="col">Last</th><th scope="col">Handle</th></tr></thead><tbody><tr><th scope="row">1</th><td>Mark</td><td>Otto</td><td>@mdo</td></tr><tr><th scope="row">2</th><td>Jacob</td><td>Thornton</td><td>@fat</td></tr><tr><th scope="row">3</th><td>Larry</td><td>the Bird</td><td>@twitter</td></tr></tbody></table>';

    $(".tabela").click((event) => {
        event.preventDefault();
        console.log("Cliquei na tabela");
    });
});

Qualquer coisa é só falar!

Grande abraço e bons estudos!

Boa tarde Gabriel, Perfeito! Funcionou de boa. Muito obrigado!!! Me tira uma dúvida rápida, o correto seria mesmo utilizar o innerHTML ou tentar trabalhar com iFrame para os portais com efeito estático. Ex.: Várias paginas são exibidas dentro da página principal (masterpage)?

Opa, Felipe! Normalmente utiliza-se o createElement() associado ao append(). No entanto, vc disse logo no início do tópico que isso não funcionou. Daí teríamos que ver como vc fez o código e se o asp.net está influenciando em algo. Só que aí me parece que seria assunto para um outro tópico!

Portanto, eu te convido a ficar a vontade para abrir esse outro tópico aqui no fórum da Alura!

Sempre que tiver qualquer dúvida é só mandar aqui!

Grande abraço e bons estudos, meu aluno!