我有一个数学程序随机生成2个数字并在2个地方显示它们(例如num1和num2)我创建了if语句,根据用户输入显示正确或不正确。我相信错误发生在if else语句中
function check() {
var txt = document.getElementById("textarea").value;
var n1 = document.getElementById("num1").innerHTML;
var n2 = document.getElementById("num2").innerHTML;
if(txt=n1+n2){hideshow(document.getElementById('correct'));}
else{hideshow(document.getElementById('incorrect'));}
}

对于任何好奇的人,这是我的所有代码:
function num1() {
var x = Math.floor((Math.random() * 10) + 1);
document.getElementById("num1").innerHTML = x;
}
function num2() {
var x = Math.floor((Math.random() * 10) + 1);
document.getElementById("num2").innerHTML = x;
}
function check() {
var txt = document.getElementById("textarea").value;
var n1 = document.getElementById("num1").innerHTML;
var n2 = document.getElementById("num2").innerHTML;
if(txt=n1+n2){hideshow(document.getElementById('correct'));}
else{hideshow(document.getElementById('incorrect'));}
}
function hideshow(which){
if (!document.getElementById)
return
if (which.style.display=="block")
which.style.display="none"
else
which.style.display="block"
}

p {
display: inline;
vertical-align: top;
}

<link rel="stylesheet" media="all" href="http://hokuco.com/style.css">
<body onload ="num1();num2();hideshow(document.getElementById('correct'));hideshow(document.getElementById('incorrect'));">
<div id ="headline">
<pre><p id="num1" name ="qty"></p> + <p id="num2"name ="qty"></p></pre>
<textarea id ="textarea"></textarea></br>
<button onclick="check();">check</button>
<button onclick="num1();num2();hide(document.getElementById('correct'));hide(document.getElementById('incorrect'));">new</button>
<div id="correct" style="font:24px bold; display: block">Good job!</div>
<div id="incorrect" style="font:24px bold; display: block">Incorrect</div>
</div>
&#13;
答案 0 :(得分:0)
两件事:
value
的{{1}}和元素的input
始终为字符串
innerHTML
用于分配,而非比较
所以你的
=
将
将if (txt=n1+n2)
字符串的结果分配到n2
字符串末尾的n1
如果结果字符串不是完全空白,请进入txt
的正文
要执行添加,您需要转换为数字。我在this answer中详细介绍了如何做到这一点。要进行比较,请使用if
或==
。如果操作数是相同类型,那么使用哪个并不重要。如果他们不是,===
会试图强迫他们进行比较(有时以惊人的方式),==
不会(他们会说他们不是如果他们属于不同类型则相等。
答案 1 :(得分:0)
innerHtml
将检索字符串而不是数字,您必须解析它。
此外,if(txt=n1+n2)
不会检查第一个nuber是否等于第二个,它会将第一个数字添加到第二个,如果添加的结果为false,则结果将始终为true unliss null或undefined。要检查第一个是否等于第二个,您需要使用==
。
function check() {
var txt = document.getElementById("textarea").value;
var n1 = document.getElementById("num1").innerHTML;
var n2 = document.getElementById("num2").innerHTML;
n1=parseInt(n1);
n2=parseInt(n2);
if(txt==n1+n2){hideshow(document.getElementById('correct'));}
else{hideshow(document.getElementById('incorrect'));}
}
答案 2 :(得分:0)
function check() {
var txt = parseFloat(document.getElementById("textarea").value);
var n1 = parseInt(document.getElementById("num1").innerHTML);
var n2 = parseInt(document.getElementById("num2").innerHTML);
alert(txt==n1+n2);
if(txt==n1+n2){hideshow(document.getElementById('correct'));}
else{hideshow(document.getElementById('incorrect'));}
}
你缺少==,而不是=。 并且txt,n1,n2是字符串而不是数字。所以你必须解析浮动它们