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

如何使用解析后的JSON数据制作quiz表单?代码运行无输出如何排查

代码存在的3个核心问题

  • 第一:obj.quiz是对象类型,不是数组,不存在length属性,for循环的判断条件i < obj.quiz.length结果永远为false,循环一次都不会执行,这是页面没有内容的根本原因。
  • 第二:单选按钮的配置逻辑错误:所有题目的单选name属性都设为同一个options,会导致所有题目只能选一个选项;同时input没有设置id和label的for属性对应,点击标签无法选中对应选项。
  • 第三:options是数组格式,直接拼接进字符串会被默认转为逗号分隔的字符串,不会生成多个选项。

修复后可正常运行的代码

const json = 
  { quiz: 
    { q1: { question: 'The question?', options: [ 'option one', 'option two'] , answer: 'The answer' } 
    , q2: { question: 'The question?', options: [ 'option one', 'option two'] , answer: 'The answer' } 
    , q3: { question: 'The question?', options: [ 'option one', 'option two'] , answer: 'The answer' } 
    , q4: { question: 'The question?', options: [ 'option one', 'option two'] , answer: 'The answer' } 
  } } 
  
var obj = JSON.parse(JSON.stringify(json));
// 先把quiz对象转成数组再遍历
const quizList = Object.values(obj.quiz)
let htmlStr = ''
// 整个测验用一个form包裹即可
htmlStr += '<form id="quizForm">'
quizList.forEach((quizItem, index) => {
  // 插入题目
  htmlStr += `<h2>${quizItem.question}</h2>`
  // 遍历当前题目的所有选项
  quizItem.options.forEach((option, optIndex) => {
    const optId = `q${index}_opt${optIndex}`
    htmlStr += `
      <input type="radio" id="${optId}" name="q${index}" value="${option}">
      <label for="${optId}">${option}</label>
      <br>
    `
  })
})
htmlStr += '</form>'
// 一次性插入DOM,比多次累加innerHTML性能更好
document.body.innerHTML = htmlStr

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:03