簡體   English   中英

無法將變量從一個函數傳遞給Javascript中的另一個函數

[英]Not able to pass variable from one function to another in Javascript

Java和HTML的新手。 簡而言之,如果用戶輸入正確的隨機數學問題總和,則嘗試更新分數。 無法將問題的答案傳遞給我的函數,該函數檢查用戶輸入的內容是否正確。 我只想分數增加一分。 由於某種原因,我無法將參數“ score”傳遞給該函數。 這是我的代碼的一個非常簡單的示例。 更關注邏輯而不是程序的外觀。 我知道現在分數不會正確更新,但是問題出在“答案”變量的傳遞上。 一旦至少調用了該函數,我將輕松完成分數的提高。 非常感謝您的寶貴時間!

    <html>
<title></title>
<head>
<link rel="stylesheet" type="text/css" href="style.css">

</head>

<body onload = "displayProblem()">

<script>

function displayProblem(){
 var answer = (firstNum) + (secondNum);    
 var firstNum = (Math.floor(Math.random()*10) + 1);
 var secondNum = (Math.floor(Math.random()*10) + 1);

 document.getElementById("qstns").innerHTML = firstNum +" + " + secondNum    +" = ";

 }  

function checkAnswer(){
  var userAnswer = document.getElementById("answr").value; 
   if(userAnswer === answer){
    updateScore();
    console.log("score updated");
  }
console.log("did not update score");

}

function displayNext(){
 document.getElementById("next").style.display = "block";
}

function hideNext(){
 document.getElementById("next").style.display = "none";
 }

function updateScore(){
  var score = 0;
  score++;
  document.getElementById("score").innerHTML = score;

}

function clearAnswer(){
  document.getElementById("answr").value = " ";
}


 </script>

<div id="main">
 <div id="qstns">

  </div>


</div>
<input type="text" id="answr">
Score: <label id="score"> 0 </label>

<button type="Sumbit" id="submit" onclick="displayNext(), checkAnswer    ()">Check</button>
<button type="Submit" id="next" onclick="displayProblem(), hideNext(),    clearAnswer()" style="display:none;">Next</button>


</body>

</html>

問題是,每次調用函數“ updateScore”時,都會將“ score”的值重置為零。

一種方法可能是:先閱讀當前分數而不是增加...

function updateScore(){
  var score = pareseInt(document.getElementById("score").innerHTML);
  score++;
  document.getElementById("score").innerHTML = score;
}

或者這樣:將得分設置為“全球”,而不是提高...

var score = 0;
function updateScore(){
  score++;
  document.getElementById("score").innerHTML = score;
}

嘗試這個:

<html>
      <title></title>
      <head>
      </head>
      <body onload="displayProblem()">
        <script>
            var answer;
            var score=0;
            function displayProblem(){   
                 var firstNum = (Math.floor(Math.random()*10) + 1);
                 var secondNum = (Math.floor(Math.random()*10) + 1);
                 answer = (firstNum) + (secondNum); 
                 document.getElementById("qstns").innerHTML = firstNum +" + " + secondNum    +" = ";
             }  

            function checkAnswer(){
                var userAnswer = document.getElementById("answr").value; 
                if(userAnswer == answer)
                    updateScore();
            }

            function displayNext(){
                document.getElementById("next").style.display = "block";
            }

            function hideNext(){
                document.getElementById("next").style.display = "none";
            }

            function updateScore(){
                score++;
                document.getElementById("score").innerHTML = score;
            }

            function clearAnswer(){
              document.getElementById("answr").value = " ";
            }

        </script>
        <div id="main">
          <div id="qstns"></div>
        </div>
        <input type="text" id="answr">Score: <label id="score"> 0 </label></input>
        <button type="Sumbit" id="submit" onclick="displayNext(), checkAnswer    ()">Check</button>
        <button type="Submit" id="next" onclick="displayProblem(), hideNext(),    clearAnswer()" style="display:none;">Next</button>
      </body>
    </html>

您有兩個問題; 一個answerdisplayProblem()的局部變量,因此checkAnswer()無法訪問checkAnswer() ,而另一個answer是您使用===而不是== ===計算類型和值, userAnsweranswer是不同類型的,因此它的計算結果為false

JS小提琴

編輯: score將按預期增加。

<html>
<title></title>
<head>
<link rel='stylesheet' type='text/css' href='style.css'>
</head>
<body onload = 'displayProblem()'>
<script>

//'answer','score' variables should be declared outside function globally
var answer=0;
var score=0;

function displayProblem(){
 //var answer = (firstNum) + (secondNum); The calculation should be after assigning value to 'firstNum', 'secondNum'   
 var firstNum = (Math.floor(Math.random()*10) + 1);
 var secondNum = (Math.floor(Math.random()*10) + 1);
 answer = (firstNum) + (secondNum);
 document.getElementById('qstns').innerHTML = firstNum +' + ' + secondNum    +' = ';
 }  

function checkAnswer(){
  var userAnswer = document.getElementById('answr').value; 
   if(userAnswer == answer){
    updateScore();
    console.log('score updated');
  }
  else
    console.log('did not update score');
}

function displayNext(){
 document.getElementById('next').style.display = 'block';
}

function hideNext(){
 document.getElementById('next').style.display = 'none';
 }

function updateScore(){
  score++;
  document.getElementById('score').innerHTML = score;
}

function clearAnswer(){
  document.getElementById('answr').value = ' ';
}
 </script>

<div id='main'>
 <div id='qstns'>
  </div>
</div>
<input type='text' id='answr'>
Score: <label id='score'> 0 </label>
<button type='Sumbit' id='submit' onclick='displayNext(), checkAnswer();'>Check</button>
<button type='Submit' id='next' onclick='displayProblem(), hideNext(), clearAnswer();' style='display:none;'>Next</button>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM