
html 表单默认会触发表单提交并刷新页面,若未显式阻止该行为,即使仅调用 javascript 函数(如 checkanswer()),也会导致页面重载——这是前端开发中常见却易被忽略的问题。
html 表单默认会触发表单提交并刷新页面,若未显式阻止该行为,即使仅调用 javascript 函数(如 checkanswer()),也会导致页面重载——这是前端开发中常见却易被忽略的问题。
在你的 app2.html 页面中,问题根源在于:表单元素 。而你的 checkAnswer() 函数虽被调用,但执行后页面已重载,所有 JS 状态(如 currentStreak、totalCorrect、输入框内容等)均丢失,表现为“游戏莫名重启”。
✅ 正确解决方案:阻止表单默认提交行为
你需要在表单提交事件中显式调用 event.preventDefault(),以取消浏览器默认的页面跳转/刷新动作。推荐两种实现方式:
方式一:内联事件处理(快速修复)
修改 app2.html 中的
⚠️ 注意:event 对象在此上下文中自动可用,无需额外声明。
方式二:分离逻辑(更规范、推荐)
在 <script> 中为表单绑定事件监听器,提升可维护性与可测试性:</script>
document.getElementById('answerForm').addEventListener('submit', function (e) {
e.preventDefault(); // 关键:阻止默认提交
checkAnswer();
});
? 额外建议与注意事项
避免递归调用风险:当前 newQuestion() 函数中使用了递归调用(newQuestion(); return;),在极端情况下可能导致栈溢出。建议改用 while 循环重试逻辑,确保问题不重复。
Cookie 逻辑优化:if (!cookie == "") 实际等价于 if (false == "")(永远为 true),应改为 if (cookie !== "");同理,if (!getCookie("bestScore") == "") 应修正为 if (getCookie("bestScore") !== "")。
输入校验增强:isAnswerOption() 中使用了未声明的全局变量 x(for (x = 0; ...)),应改为 let x = 0 或 for (let x = 0; ...),避免污染全局作用域。
调试技巧:可在 checkAnswer() 开头添加 console.log('checkAnswer called');,配合浏览器开发者工具的「Network」面板观察是否仍有请求发出,快速验证是否真正阻止了提交。
通过以上修改,你的三角函数练习游戏将稳定运行,不再因表单提交意外刷新,用户体验与数据持久性均可得到保障。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











