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