繁体   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