2016-04-14 34 views
0

Kullanıcının girişini 'parmak' değişkenine atarsam, bunun neden sürekli kilitlendiğini anlayamıyorum. Kodun her bölümünü uyarı vererek test ettim ve her şey yolunda gibi görünüyor. Ayrıca, betikteki değişkene bir sayı atarsam, bunun iyi çalıştığını da keşfettim.Javascript: Değişken kullanıcı girdisi tarafından atandığında kilitlenme

Girdi değeri dizge olarak okunmuş olabileceği düşünülüyordu, dolayısıyla karşılaştırılan bir sayıya hiçbir zaman eşit olmazdı ve bu betiğin sonsuz bir döngüye girmesiydi. Bu yüzden giriş kutusunu type: number olarak atadım ve hala çöküyor.

Düşünceler var mı? Eğer! == kullanarak karşılaştırın zaman

<html> 

     <head> 
      <title> How Many Fingers - Computer Guesser </title> 
     </head> 

     <body> 

      <h1> How many fingers? </h1> 

      <input id='fingersInput' type='number' min='1' max='10' placeholder="Insert the number of fingers here." /> 

      <button id='check'> Go! </button> 

      <hr> </hr> 
      <p id='computerGuessesOutput'> </p> 
      <p id='allguessesOutput'> </p> 

     <script type='text/javascript'> 

      document.getElementById('check').onclick = function() { 

       var fingers = document.getElementById('fingersInput').value; 

       //var fingers = 5; 

       var computerGuesses = Math.floor(Math.random() * 11); 

       var numberOfGuesses = 1; 

       var allguesses = [computerGuesses]; 

       while (fingers !== computerGuesses) { 
        computerGuesses = Math.floor(Math.random() * 11); 

        numberOfGuesses++; 

        allguesses.push(computerGuesses); 

         } 

       document.getElementById('computerGuessesOutput').innerHTML = numberOfGuesses; 
       document.getElementById('allguessesOutput').innerHTML = allguesses; 

      } 



     </script> 

     </body> 
    </html> 
+0

Neyi başarmaya çalışıyorsunuz? Lütfen açıklık için içeriği açıklayınız. –

cevap

1

, sadece değerine göre karşılaştırmak değildir, ancak computerGuesses bir sayı iken türüne göre, bu durumda, parmak, bir dizedir. Bu daha net konsolda türünü baskı görebilirsiniz

Sen 'parmak') parseInt (kullanarak, ilk sayı veya kullanarak karşılaştırma dönüştürebilirsiniz ya! =. Bu kontrol edin: Dediğiniz gibi, metin olarak alırsınız böylece

document.getElementById('check').onclick = function() { 
 
    var fingers = document.getElementById('fingersInput').value; 
 
    var computerGuesses = Math.floor(Math.random() * 11); 
 
    var numberOfGuesses = 1; 
 
    var allguesses = [computerGuesses]; 
 
    console.log(fingers, computerGuesses); 
 
    console.log(typeof fingers, typeof computerGuesses); 
 

 
}
<html> 
 

 
    <head> 
 
    <title> How Many Fingers - Computer Guesser </title> 
 
    </head> 
 

 
    <body> 
 

 
    <h1> How many fingers? </h1> 
 

 
    <input id='fingersInput' type='number' min='1' max='10' placeholder="Insert the number of fingers here." /> 
 

 
    <button id='check'> Go! </button> 
 

 
    <hr> </hr> 
 
    <p id='computerGuessesOutput'></p> 
 
    <p id='allguessesOutput'></p> 
 
    </body> 
 
</html>

-1

Öncelikle, bir giriş var. type özniteliği görüntü ve doğrulama içindir, her zaman bir dize olacak,Çünkü bir sayı istediğiniz sonucu bir tamsayıya çevirmek için parseInt yapmalısınız. Daha sonra, parmak değerinizin rastgele aralıkta olup olmadığını (örneğin, örnekte 1-11) kontrol etmeyeceksiniz, böylece bu aralığın dışındaki herhangi bir sayı sonsuz bir döngüye sebep olacaktır.