尝试使用事件监听器在javascript中实现一个5函数计算器


<html>
<head>
<title>JS Operator</title>
<script>
function calculate(num1, num2, op){
switch (op){
case '+' : return num1 + num2
case '-' : return num1 - num2
case '*' : return num1 * num2
case '/' : return num1 / num2
case '%' : return num1 % num2
}
}
</script>
</head>
<body>
<input id="num1" type="number" placeholder="Enter first number" name="num1"/> <br/><br/>
<input id="num2" type="number" placeholder="Enter second number" name="num2"/> <br/><br/>
<input id="op" type="text" placeholder="Enter operator" name="op"/> <br/><br/>
<button id="calculate" name="calculate"> Calculate </button><br/>
<p id="result">Result: </p>
<script>
var num1 = document.getElementById("num1").value;
var num2 = document.getElementById("num2").value;
var op = document.getElementById("op").value;
document.getElementById("calculate").addEventListener("click", function(){
document.getElementById("result").innerHTML = "Result: "
document.getElementById("result").innerHTML+= calculate(num1, num2, op)
})
</script>
</body>

这是我写的代码,不确定哪里出了问题,但点击计算按钮后,结果显示为未定义。我还尝试对这2个数值使用parseInt((,但没有成功,尽管当我尝试使用alert((打印3个变量的值时,它给出的值与输入相同。请帮助某人找出错误所在。

您的代码有两个(常见!(问题:

  1. 请将.value()调用放入事件侦听器中
  2. .value()调用包装在Number(...)中,以便加法是数字加法,而不是字符串串联

下面是代码底部脚本的一个可能外观:

const num1Box = document.getElementById("num1");
const num2Box = document.getElementById("num2");
const opBox = document.getElementById("op");
const resultArea = document.getElementById("result");
document.getElementById("calculate").addEventListener("click", () => {
const x = Number(num1Box.value);
const y = Number(num2Box.value);
const op = opBox.value;
resultArea.innerHTML = `Result: ${calculate(x, y, op)}`;
});

正如@Ray所建议的,发布的解决方案是干净明了的。看看它吧,除此之外,您的代码的工作示例是

document.getElementById("calculate").addEventListener("click", function() {
document.getElementById("result").innerHTML = "Result: ";
var num1 = parseInt(document.getElementById("num1").value);
var num2 = parseInt(document.getElementById("num2").value);
var op = document.getElementById("op").value;
console.log(num1, num2);
document.getElementById("result").innerHTML += calculate(num1, num2, op)
})
function calculate(num1, num2, op) {
switch (op) {
case '+':
return num1 + num2
case '-':
return num1 - num2
case '*':
return num1 * num2
case '/':
return num1 / num2
case '%':
return num1 % num2
}
}
<html>
<head>
<title>JS Operator</title>
</head>
<body>
<input id="num1" type="number" placeholder="Enter first number" name="num1"/> <br/><br/>
<input id="num2" type="number" placeholder="Enter second number" name="num2"/> <br/><br/>
<input id="op" type="text" placeholder="Enter operator" name="op"/> <br/><br/>
<button id="calculate" name="calculate"> Calculate </button><br/>
<p id="result">Result: </p>
</body>
</html>

在发布问题后,我也尝试了以下代码,因为参与了所以无法更新。下面是:

<html>
<head>
<title>JS Operator</title>
<script>
function calculate(){
var num1 = parseInt(document.getElementById("num1").value);
var num2 = parseInt(document.getElementById("num2").value);
var op = document.getElementById("op").value;
var result = 0;
switch (op){
case '+' : result = num1 + num2;
break;
case '-' : result =  num1 - num2;
break;
case '*' : result =  num1 * num2;
break;
case '/' : result =  num1 / num2;
break;
case '%' : result =  num1 % num2;
break;
}
document.getElementById("res").innerHTML = "Result: ";
document.getElementById("res").innerHTML += result;
}
</script>
</head>
<body>
<input id="num1" type="number" placeholder="Enter first number"/> <br/><br/>
<input id="num2" type="number" placeholder="Enter second number"/> <br/><br/>
<input id="op" type="text" placeholder="Enter operator"/> <br/><br/>
<button id="calc"> Calculate </button><br/>
<script>
document.getElementById("calc").addEventListener("click", function(){calculate()})
</script>
<p id="res">Result: </p>
</body>
</html>

相关内容

最新更新