You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS脚本放body末尾仍报无法访问null的innerHTML属性错误

错误根源

报错和script标签位置无关,核心是循环索引和DOM id不匹配:

  • 你的for循环初始step值为0,第一次循环拼接出的查找id是crit0,但页面中p标签的id范围是crit1~crit5,不存在id为crit0的元素,document.getElementById('crit0')返回null,访问null的innerHTML属性就会触发类型错误。
  • 代码还有两个隐藏问题:
    • 计数变量answ未提前初始化,执行var answ = answ +1时右侧answ为undefined,计算结果会是NaN
    • Math.round(Math.random())生成0和1的概率不均等,Math.random()返回[0,1)区间值,round取0的区间是[0,0.5)、取1的区间是[0.5,1),边界值会导致概率偏差
修复后可运行代码
<p id="crit1"></p>
<p id="crit2"></p>
<p id="crit3"></p>
<p id="crit4"></p>
<p id="crit5"></p>

<script>
var criteria = [
  ['opt1', 'opt2'], 
  ['opt3', 'opt4'],
  ['opt5', 'opt6'], 
  ['opt7', 'opt8'], 
  ['opt9', 'opt10']
];
// 提前初始化计数变量
var answ = 0;
// 循环从1开始,匹配crit1~crit5的id序号
for (var step = 1; step <= 5; step++){
  // 修正随机数逻辑,保证两个选项选中概率严格50%
  var rand = Math.floor(Math.random() * 2);
  // 数组索引从0开始,取对应行时用step-1匹配索引
  if (rand === 1) {
    document.getElementById('crit' + step).innerHTML = criteria[step - 1][1];
    answ += 1;
  } else {
    document.getElementById('crit' + step).innerHTML = criteria[step - 1][0];
  }
}
</script>
修复逻辑说明
  • 调整循环起止值为1~5,和DOM元素id的序号完全对应,不会再出现找不到元素的问题
  • 数组索引用step-1对齐循环序号,保证二维数组每一行和对应p标签一一匹配
  • 循环外提前初始化answ为0,避免计算得到NaN
  • 用Math.floor(Math.random() * 2)替换原有随机数逻辑,保证0、1两个取值概率均等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:51:21