Fui explorar um pouco e quando eu carrego a página já aparece direto que "Cliquei no botao!" e que "Você perdeu". Por favor, me ajudem.
'''
'''
Fui explorar um pouco e quando eu carrego a página já aparece direto que "Cliquei no botao!" e que "Você perdeu". Por favor, me ajudem.
'''
'''
<meta charset="UTF-8">
<input type="text" id="numero" />
<input type="submit" id="adivinhar" value="Compare com o meu segredo!"/>
<script>
var checarNumero = function(){
alert("Cliquei no botao!")
var numero = document.getElementById("numero").value;
for(var i =0; i < segredos.length; i++){
if (parseInt(numero.value) == segredos[0]){
alert("Você acertou, parabéns!")
};
};
alert("Você perdeu")
};
var segredos = [10,23,45,67,85]
var botao = document.getElementById("adivinhar");
botao.onclick = checarNumero();
</script>
Olá Marcus, identifiquei alguns erros no seu código, corrigi o código e fiz alguns comentários explicando mais ou menos o porque de cada erro. Espero ter ajudado.
<meta charset="UTF-8">
<input type="text" id="numero" />
<input type="submit" id="adivinhar" value="Compare com o meu segredo!"/>
<script>
// O array precisa ser declarado antes de vc chama-lo na função.
var segredos = [10,23,45,67,85];
/*Essa variável fica fora da função, e não precisa de ".value" aqui,
pelo menos não neste caso. */
var numero = document.getElementById("numero");
/*foi necessario criar essa variavel para tirar os "alerts" de dentro do
loop, corrigindo assim o problema de repetição involuntária das mensagens*/
var check = false;
var checarNumero = function(){
for(var i =0; i < segredos.length; i++){
/*O array segredos precisa ser declarado aqui na posição [i]
isso indica que vc esta pedindo verificação em todas as posições do
array. Se vc colocar segredos [0], vai estar solicitando verificação
apenas na posição 0 do array, ou seja, o programa compararia o
numero inserido pelo usuario apenas com o primeiro numero do array
*/
if (segredos[i] == numero.value){
check = true;
}
}
if(check == true){
alert("Parabéns! Você ganhou.")
} else{
alert("Você perdeu");
}
}
var botao = document.getElementById("adivinhar");
botao.onclick = checarNumero; // Nao se utiliza parenteses nesse caso, apenas quando for chamar a função.
</script>
Eu já havia conseguido fazer. A minha dúvida é mais pq isso não funciona e não de que outra forma eu poderia fazer para funcionar. De qualquer forma Livia. Muito obrigado, suas respostas foram muito bem elaboradas.
Bom, minhas reais dúvidas então seriam: Eu realmente declarei o array depois da chamada da função? Porque foi necessário tirar o alert("acertou") de dentro do loop? Por que o programa executa a função antes de eu clicar o botão?
Eu entendo o pq da função já dizer que eu errei. Isso ocorria pq a função checarNumero() era executada antes de o usuário digitar e ser atribuído um valor pra o input do tipo "text".
Ok, vamos por partes:
quanto ao lance de declarar o array, eu consultei meu marido (que já trabalha com programação a tempos) e ele me esclareceu que na vdd, o importante é declara-lo antes de chamar a função...e, como vc só chama a função de fato na última linha, então está tudo certo, desculpe pela confusão, rs.
Bom, eu tirei o alert ("acertou") de dentro do "loop" pelo seguinte motivo: para que essa lógica dê certo, é necessário que as mensagens de acerto (alert "acertou") e erro (alert "errou) sejam vinculadas a suas respectivas condições de execução, ou seja, quando vc fez o if (segredos[i] == numero.value), vc estabeleceu que, quando essa condição fosse verdadeira, o alert ("acertou") deveria ser executado. Para vincluar a mensagem de erro a uma condição usamos o else, que faria o programa executar o alert("errou") sempre que a condição do if fosse falsa. Até ai tudo bem, o problema, é que, se vc colocar o else dentro do loop junto com o if, o programa gera um erro, eu não sei dizer pq isso acontece exatamente (depois faz o teste para vc ver). Por isso tirei o alert ("acertou") do loop, pq esse if que executa o alert ("acertou") precisa estar junto do else que executa o alert ("errou") para que a coisa toda funcione corretamente. Ai usei a estratégia da variável "check" para vinclular o if e o else de baixo com o if (segredos[i] == numero.value), que por sua vez precisa estar dentro do loop.
quanto ao lance de a função já dizer que vc errou de primeira, não sei se a minha resposta é a melhor, mas acredito que o seu problema na vdd ocorreu porque vc colocou o "alert", que indicava o resultado negativo, dentro da função mas solto, ou seja, analisando seu código, o que aconteceria quando vc chamasse a função? Primeiro o código ia entrar no "loop" verificando a se a condição do "if" é verdadeira...se fosse verdadeira, o bloco de código do "if" seria executado, e o alert ("Vc perdeu") também seria executado, pq vc não estabeleceu nenhuma condição para a execução dele, logo o programa não tem um parâmetro de para saber quando deve ou não utiliza-lo, sendo assim, ele seria executado todas as vezes que a função fosse chamada, já que ele pertence a função, mas não há condição para a execução dele, entendeu?
Galera todo mundo devia ler essa resposta, é um erro comum e bastante interessante para se aprender...
Havia me esquecido desse tópico, já tem 2 dias que solucionei minha pergunta. Então, o problema da função está na seguinte parte:
for(var i =0; i < segredos.length; i++){
if (parseInt(numero.value) == segredos[0]){
alert("Você acertou, parabéns!")
};
Esse loop nunca será executado... Não há como comparar o "i" com o "segredos.length", pois os dois tem valor zero. Não é possível argumentar a condição do for "0 < 0". Portanto, na seguinte função se encontra a SOLUÇÃO que encontrei para esse problema:
var cliqueAdicionar = function(){
var numDig = parseInt( document.getElementById("numero").value );
console.log("cliquei botão adicionar!!!!");
if(bingo.length == 0){
bingo.push(numDig)
alert("O primeiro número do seu bingo, " + numDig + ", foi adicionado ao bingo.")
}else{
var jaAdd= false
for(i = 0; i < bingo.length; i++){
//alert("for for");
if(bingo[i] == numDig){
//alert("tou dentro do if")
jaAdd = true
//alert("break")
break;
};
};
//alert("after for")
if(jaAdd){
//alert("teste if")
alert("Este número já foi adicionado, tente outro.");
}else{
//alert("teste else")
bingo.push(numDig);
alert("O número " + numDig + " foi adicionado ao bingo.");
};
};
};
Obrigado pela ajuda Lívia. Espero que meus colegas também possam aprender com esse interessante erro...