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

Estranha sequência: por quê a frase <h3> aparece antes?

Criei um código para testar o funcionamento do trio HTML, CSS e JS. O código funciona, mas eu não entendo por quê a frase OBRIGADO PELA PARTICIPAÇÃO! aparece antes da função finalizar os cálculos (acredito estar relacionado com o comportamento do onclick). trio.html:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <title>trio-principal</title>
    <link rel="stylesheet" href="trioStyle.css"/> 
    <script src="trioFunction.js"></script> 

</head>

<body>
    <h1>Chamando função externa para multiplicar:</h1>
    <form>                                  
        <label>Digite um número:<input type="text"    id="n1" ></label>
        <label>Digite outro número:<input type="text" id="n2" ></label>       
<!--=============  BOtão onclick que chama a função" =======================-->
        <input type="button" value="Multiplicar" onclick="calcular()">   
    </form>       

    <h2 id="resultado"></h2v>
    <h3>OBRIGADO PELA PARTICIPAÇÃO! (Isto não deveria aparecer só depois?)</h3>

</body>
</html>

trioFunction.js ( a função calcular() ):

function calcular() {
    var n1 = parseInt(document.getElementById('n1').value);
    var n2 = parseInt(document.getElementById('n2').value);
    var res = 'Multiplicando ' + n1 + ' x ' + n2 + ' = ' + n1 * n2;
    document.getElementById('resultado').innerHTML = res;
}

trioStyle.css :

#resultado {
    margin-left: 200px;
    font-size: 25px;
    color: blue;
}

Alguém pode me explicar esse comportamento estranho (a meu ver)? Obrigado

4 respostas

Olá, Eber.

Quando você coloca

<h3>OBRIGADO PELA PARTICIPAÇÃO!</h3>

no arquivo trio.html ele é lido pelo navegador e renderizado imediatamente.

Uma solução para fazer com que essa mensagem aparecesse só depois do cálculo seria criar esse elemento HTML com JavaScript logo após a execução dos cálculos. Uma forma de fazer isso é dentro da função calcular() logo abaixo de document.getElementById('resultado').innerHTML = res; inserir as três linhas de código abaixo:

var mensagem = document.createElement('h3'); //Cria o elemento h3
mensagem.innerHTML = "OBRIGADO PELA PARTICIPAÇÃO!!"; // adiciona o texto da mensagem de agradecimento
document.body.appendChild(mensagem); // insere o elemento mensagem ao DOM

Espero ter ajudado! Abraços.

Então, diferente das linguagens de programação, que seguem a sequência de linhas de comando, como o próprio javascript, o HTML já projeta a página toda de uma só vez. Por isso a função, que foi chamada no meio das linhas HTML, só foi executada depois.

solução!

O navegador lê primeiro o arquivo HTML e o exibe. Por isso, quando você declarou uma tag <h3> no seu HTML ele foi exibido imediatamente. Usamos JavaScript para manipular o DOM e, por exemplo, exibir o conteúdo que vc deseja no momento que acontecer um evento na sua página ou após um período de tempo estabelecido por você.

Obrigado pelas explicações Neilton. Abraço

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