如何实现按下Enter键触发计算器的calculate函数?
实现按下Enter键触发计算器的calculate函数
方法一:使用表单标签(推荐,符合HTML语义)
把输入控件和按钮包裹在<form>标签中,利用表单默认的Enter提交行为,同时阻止表单的默认跳转,绑定到calculate函数。
修改后的HTML代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> <script type="text/javascript" src="index.js"></script> <title>Document</title> </head> <body> <h3>Mini calculator</h3> <form class="checker" onsubmit="calculate(); return false;"> <input type="text" name="num1" placeholder="Enter first num"> <br><br> <input type="text" name="oper" placeholder="enter operation (+,-,/,or*)"><br><br> <input type="text" name="num2" placeholder="Enter second num"> <br><br> <button type="submit">Calculate</button><br><br> <button type="button" onclick="refreshPage()">Refresh</button> </form> <p id="message" class="message"></p> </body> </html>
说明:
- 将原
<div class="checker">改为<form>,添加onsubmit="calculate(); return false;",return false用于阻止表单默认的页面跳转行为 - 将Refresh按钮的
type改为button,避免按Enter时误触发刷新
方法二:给输入框绑定键盘事件
直接给输入框添加keydown事件,检测按下的是否为Enter键,若是则调用calculate函数。
单个输入框绑定(修改HTML)
<input type="text" name="num2" placeholder="Enter second num" onkeydown="if(event.key === 'Enter') calculate();">
批量绑定(修改JS)
在index.js末尾添加以下代码:
const inputs = document.querySelectorAll('input'); inputs.forEach(input => { input.addEventListener('keydown', function(e) { if (e.key === 'Enter') { calculate(); } }); });
方法三:全局监听键盘事件
在全局范围内监听Enter键按下事件,触发计算函数:
// 在index.js末尾添加 document.addEventListener('keydown', function(e) { if (e.key === 'Enter') { calculate(); } });
额外优化:修复减法逻辑bug
原JavaScript中减法分支存在字符串拼接错误:
document.getElementById("message").innerHTML="result is: "+num1-num2;
代码会先把"result is: "+num1拼接成字符串,再尝试减去num2,导致结果异常。需给减法运算添加括号:
document.getElementById("message").innerHTML="result is: "+(num1-num2);
内容的提问来源于stack exchange,提问作者Luka Bitsadze
相关产品推荐
相关产品推荐

