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

"alert" aparece 3 x direto, após 1 único input

Olá,

eu estou com um pequeno problema. cheguei no cod igual o instrutor. ok. porém quando executo na minha máquina não aparece a opção de "digitar 1 vez, alert, digita 2 vez, alert, digita 3 vez, alert". Eu só consigo digitar 1 vez, e depois ele aparece 3 "alert"s em sequencia, falando se eu errei ou acertei no primeiro, e os dois seguintes com errou. Obrigada desde já.

<script>

    var segredos = [5, 7, 10, 2];
    var input = document.querySelector("input");
    input.focus();

    function verifica () {
        for (var posicao = 0; posicao < 4; posicao++) 
            if (input.value == segredos[posicao]) {

                alert("Acertou");
            } else {

                alert("Errou");
            }
        input.value = "";
        input.focus();
    }

    var button = document.querySelector("button");
    button.onclick = verifica;

</script>
3 respostas

Olá Gabriela,

Esse problema dos alerts está ocorrendo porque o alert de erro está dentro do for, bem como o alert de acerto. Se o número estiver correto o alert Acertou será disparado 3 vezes e se estiver errado o de Errou também será disparado 3 vezes.

O correto é criar uma variável boolean para armazenar se o número foi encontrado ou não, vamos supor que essa variável tenha o nome de acertou e inicie com o valor false.

Caso o número digitado esteja dentro do array segredos a variável acertou deve receber valor true, o alert Acertou exibido e o for deve ser interrompido com a instrução break

Caso o número digitado não esteja dentro do array segredos o valor da variável acertou continuará como false

Após a execução do for deve ser feita uma verificação no valor da variável acertou. Se for false deve ser exibido um alert de Errou

Veja como ficará a função verifica()

  function verifica() {

    var acertou = false;

    for (var posicao = 0; posicao < 4; posicao++) {
      if (input.value == segredos[posicao]) {
        acertou = true;
        alert("Acertou");
        break;
      }
    }

    if (acertou == false) {
      alert("Errou");
    }

    input.value = "";
    input.focus();

  }
solução!

Gabriela,

O código completo ficará da seguinte forma:

<meta charset="UTF-8">

<input />
<button>Compare com o meu segredo</button>

<script>

  var segredos = [5, 7, 10, 2];
  var input = document.querySelector("input");
  input.focus();

  function verifica() {

    var acertou = false;

    for (var posicao = 0; posicao < 4; posicao++) {
      if (input.value == segredos[posicao]) {
        acertou = true;
        alert("Acertou");
        break;
      }
    }

    if (acertou == false) {
      alert("Errou");
    }

    input.value = "";
    input.focus();

  }

  var button = document.querySelector("button");
  button.onclick = verifica;

</script>

nossa Guilherme, muito obrigada.

Eu vi que vacilei e mandei a pergunta antes de assistir até o final, mas é que tinha dado um erro semelhante antes dessa aula já. Achei que era o mesmo bug.

Obrigada!!