You need to enable JavaScript to run this app. 自学JS提取表单数据实现猜数字游戏运行异常求助
优惠活动
大模型
产品
解决方案
定价
更多

自学JS提取表单数据实现猜数字游戏运行异常求助

猜数字小游戏故障排查

你的代码存在4处刚接触JS DOM操作时非常容易踩的基础遗漏,直接导致脚本无法正常运行:

1. 脚本执行时机完全错误

当前的判断逻辑在页面刚加载完成的瞬间就会执行,此时用户还没有在输入框输入任何内容,取到的userGuess永远是空值。更关键的是,代码没有绑定任何用户交互事件——哪怕用户后续在输入框敲完数字、点了提交按钮,也根本不会触发判断逻辑。

2. 未拦截表单的默认提交行为

你用的是原生表单的submit类型按钮,点击后浏览器会默认触发页面刷新操作,所有临时输入、页面状态都会被清空,就算逻辑跑通了,也留不住判断结果。

3. 依赖的工具函数未实现

你在代码里调用了writeMessage方法,用来往状态区域写入提示文字,但从头到尾没有写这个函数的具体逻辑。就算前面的执行时机、事件绑定都做对了,调用不存在的方法也会直接抛出报错,中断整个脚本的运行。

4. 数据类型不统一的隐患

从input元素取到的value属性永远是字符串类型,哪怕用户输入的是纯数字,拿到的也是字符串格式的数字。虽然用==松散比较暂时能兼容相等的判断,但涉及大小对比时,隐式类型转换很容易引发不符合预期的结果,需要显式把输入值转成数字类型。

可直接运行的核心逻辑参考

// 固定目标猜数
const targetNum = 6;
// 补上缺失的writeMessage工具函数
function writeMessage(elementId, content) {
  document.getElementById(elementId).innerHTML = content;
}
// 给表单绑定提交监听事件
document.querySelector('form').addEventListener('submit', (event) => {
  // 阻止表单默认的页面刷新行为
  event.preventDefault();
  // 实时获取用户输入,显式转为数字类型
  const userGuess = Number(document.getElementById('number').value);
  // 分支判断
  if (userGuess === targetNum) {
    writeMessage('statusArea', '<p>你猜中我设定的数字啦!</p>');
  } else if (userGuess > targetNum) {
    writeMessage('statusArea', '<p>不对哦,猜大了,再试试!</p>');
  } else if (userGuess < targetNum) {
    writeMessage('statusArea', '<p>不对哦,猜小了,再试试!</p>');
  }
  // 判断完成后清空输入框,方便下次输入
  document.getElementById('number').value = '';
})

另外有个小细节:你之前写的提示文字外层多嵌套了一层双引号,渲染到页面上会在文字前后显示多余的引号,去掉多余嵌套的引号就能正常展示了。

内容的提问来源于stack exchange,提问作者the_vagabond_blonde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 15:45:08