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

Só esta testando o primeniro array

só esta testando o array na primeira posição

<meta charset="UTF-8">

<input/>
<button >Compare com o meu segredo</button>
<script>
    var segredos = [3,6,9];
    var input = document.querySelector("input");
    input.focus();

    function verifica(){
        var achou=false;
        for(var posicao=0; posicao < segredos.length;posicao++){
            if(input.value == segredos[posicao]){
                achou=true;
                break;
            }
            input.value="";
            input.focus();

        }
        if (achou== true){
            alert("Você ACERTOU!!!");
        }
        if(achou== false){
            alert("Você ERROU!!!");
        }

    }

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


</script>
2 respostas
solução!

Olá, Jhones! Beleza, cara? =)

O problema do seu código é esse: input.value = "";.

Quando você escreve esse código, você está alterando o valor de input para uma String vazia...

Repare no seu laço for:

for (var posicao = 0; posicao < segredos.length; segredos++) {
    if (input.value == segredos[posicao]) {
        achou = true;
        break;
    }
    input.value = "";
    input.focus();
}

A primeira coisa que podemos ver logo na assinatura do loop é que estamos, de fato, percorrendo todo o array segredos.

Mas o que esse código faz em cada posição desse array? A primeira coisa é verificar se o valor de input é o mesmo que a posição do array. Até aí, legal, é o que queremos fazer... E se for igual? Nesse caso alteramos a variável achou para true e podemos quebrar o loop (comando break).

Mas... E se o valor não for igual à primeira posição? Nesse caso, repare que ele não entrará no if, mas continuará a execução:

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

O código está alterando o valor do input! Se ele não for igual à primeira posição, ele já é alterado para uma String vazia, o que vai acarretar no if nunca mais sendo executado!

Acredito que o que você queria fazer, é limpar o campo e colocar o foco no input, correto?

Nesse caso, o melhor seria fazer isso após o for! Pois assim, quer dizer que percorremos todas as posições e não temos mais problema em alterar seu valor, assim:

function verifica() {
    var achou = false;

    for (var posicao = 0; posicao < segredos.length; posicao++) {
        if (input.value == segredos[posicao]) {
            achou = true;
            break;
        }
    }

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

    if (achou == true) {
        alert("Você acertou!");
    }

    if (achou == false) {
        alert("Você errou!");
    }
}

Espero ter ajudado, mas qualquer dúvida que possa ter restado, não hesite em perguntar que iremos ajudá-lo! =)

Abraço e bons estudos,

Fábio

muito obrigado , deu certo