我正在尝试创建一个表单,向用户显示两个随机数,然后他必须回答这两个数字的总和。 这是我的代码:
HTML
<button class="Btn" id="check" onclick="check()">Check!</button>
<button class="Btn" onclick="newCalculation()">New Calculation</button>
<label id="question"></label>
<input id="answerBox" class="txtBox" type="text"></input>
这是两个按钮,一个标签和一个文本框。第一个按钮进行新计算,第二个按钮检查文本框的值是否等于计算的答案。标签用于显示计算。
这是新计算按钮的Javascript:
function newCalculation() {
var firstnumber, secondnumber, answer;
firstnumber = (Math.floor(Math.random()*10)+1)*10+(Math.floor(Math.random()*10));
secondnumber = (Math.floor(Math.random()*10)+1)*10+(Math.floor(Math.random()*10));
answer = firstnumber + secondnumber;
document.getElementById("question").innerHTML = firstnumber + " + " + secondnumber + " = ";
}
据我所知,这一切都很严谨。但是当我必须检查它是否正确时,我无法访问变量。
Checkbutton
function check() {
if (document.getElementById("answerBox").innerHTML === newCalculation.answer) {
alert("Correct!")
}
else {
alert("Wrong!")
};}
在控制台日志中,它使用文本框显示正确的值,但未定义&#39;用答案变量。如果我删除&#34; newCalculation。&#34;它只是说变量是未定义的。 我只是对知道如何解决这个问题感兴趣,并且让所有这些都有效。如果你能给出完整的代码示例,那就太棒了!
由于
答案 0 :(得分:0)
首先,input
是自闭标签,它没有开/关标签,如
应
<input id="answerBox" class="txtBox" type="text">
而不是
<input id="answerBox" class="txtBox" type="text"></input>
您应该从输入标记中获取将要比较的值。
var compareVal = document.getElementById("answerBox").value;
<强>更新强>
当您想要共享变量时,最好创建类及其相关的属性和方法,您可以使用所需的paritcular方法访问它的属性,就像您的情况一样。
的javaScript
var calc = function (){
this.answer =""; //can access on newCalculation() and check()
this.newCalculation = function () {
var firstnumber, secondnumber,
firstnumber = (Math.floor(Math.random()*10)+1)*10+(Math.floor(Math.random()*10));
secondnumber = (Math.floor(Math.random()*10)+1)*10+(Math.floor(Math.random()*10));
this.answer = firstnumber + secondnumber;
document.getElementById("question").innerHTML = firstnumber + " + " + secondnumber + " = ";
},
this.check = function() {
var checkedVal = parseInt(document.getElementById("answerBox").value, 10);
if (checkedVal === this.answer) {
alert("Correct!");
}else {
alert("Wrong!");
}
}
}
var myCal = new calc(); //creating object by calling class/constructor
function checkAll(action){
if(action == 'check'){
myCal.check();
}
if(action == 'newCalc'){
myCal.newCalculation();
}
}
<强> HTML 强>
<button class="Btn" id="check" onclick="checkAll('check')">Check!</button>
<button class="Btn" onclick="checkAll('newCalc')">New Calculation</button>
<label id="question"></label>
<input id="answerBox" class="txtBox" type="text" value="20"/>
答案 1 :(得分:0)
当你在JavaScript中声明一个没有其他块的函数时,它属于全局范围,因此变量newCalculation
存在类型function
我建议的是简单并声明
var answer;
在全局范围内 - 意思是不在任何函数中。然后,当您在check()
中进行比较时,只需与answer
进行比较而不是newCalculation.answer