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

动态创建Radio Button后,如何根据变量设置其checked状态?

动态单选按钮设置选中状态问题

我通过Fetch方法获取数据并动态构建表单单选按钮,目前遇到的问题是:单选按钮创建完成后,当decision变量被设置为"N"或"Y"时,无法让对应单选按钮自动处于选中状态。需要注意的是,decision变量是在Fetch构建完单选按钮之后才设置的。


获取到的数据

[
  {
    "ROW_NUMBER": 1,
    "DATA_CODE": "Decision",
    "CODE": "N",
    "DESCRIPTION": "Reviewed Comment, No Response Required"
  },
  {
    "ROW_NUMBER": 2,
    "DATA_CODE": "Decision",
    "CODE": "Y",
    "DESCRIPTION": "Response Entered Below"
  }
]

数据获取与动态构建代码

let radioDecision;

fetch('URL', options)
  .then(response => response.json())
  .then(data => {
     Object.entries(data).forEach(([key, value]) => {
       radioDecision += `<input type="radio" id="decision" name="decision" class="form-check-input" value="${value.CODE}" required> ${value.DESCRIPTION}<br/>`
     });
  })
  .catch((error) => {
     toastr["error"]("Something went wrong.", "Error");
  });

静态单选按钮的实现方式(参考)

静态场景下,我通过变量判断为单选按钮添加checked属性:

let decision_selection_1;
let decision_selection_2;

decision = 'N';

decision_selection_1 = decision == "N" ? "checked" : "";
decision_selection_2 = decision == "Y" ? "checked" : "";

对应的HTML:

<div class="form-check">
      <input type="radio" id="decision" name="decision" class="form-check-input" value="N" ${decision_selection_1} required>
      Review Comment, No Response Required
</div>
<div class="form-check">
     <input type="radio" id="decision" name="decision" class="form-check-input" value="Y" ${decision_selection_2} required>
     Response Entered Below
     <div class="valid-feedback">Completed!</div>
     <div class="invalid-feedback">Please make a selection.</div>
 </div>

渲染后的源码:

<div class="form-check">
  <input type="radio" id="decision" name="decision" class="form-check-input" value="N" checked required=""> Reviewed Comment, No Response Required
<br>
  <input type="radio" id="decision" name="decision" class="form-check-input" value="Y" required=""> Response Entered Below<br>
  <div class="valid-feedback">Completed!</div>
  <div class="invalid-feedback">Please make a selection.</div>
</div>

动态构建后的现状

动态生成的单选按钮插入DOM后,没有自动选中对应选项:

<div class="form-check">
  ${radioDecision}
  <div class="valid-feedback">Completed!</div>
  <div class="invalid-feedback">Please make a selection.</div>
</div>

渲染后的源码:

<div class="form-check">
  <input type="radio" id="decision" name="decision" class="form-check-input" value="N" required=""> Reviewed Comment, No Response Required
<br>
  <input type="radio" id="decision" name="decision" class="form-check-input" value="Y" required=""> Response Entered Below<br>
  <div class="valid-feedback">Completed!</div>
  <div class="invalid-feedback">Please make a selection.</div>
</div>

解决方案

方案1:构建DOM时动态添加checked属性(适合提前获取到decision值的场景)

如果能在生成HTML字符串时拿到decision的值,直接在构建单选按钮时判断添加checked属性,同时修复id重复的问题(HTML中id必须唯一):

let radioDecision = ''; // 初始化空字符串,避免开头出现undefined

fetch('URL', options)
  .then(response => response.json())
  .then(data => {
     // 假设此处已获取到decision值,或之后会设置
     const decision = 'N'; // 示例值,实际根据业务逻辑获取

     Object.entries(data).forEach(([key, value]) => {
       // 动态判断是否添加checked属性
       const checkedAttr = decision === value.CODE ? 'checked' : '';
       // 给每个单选按钮设置唯一id
       radioDecision += `<input type="radio" id="decision_${value.CODE}" name="decision" class="form-check-input" value="${value.CODE}" ${checkedAttr} required> ${value.DESCRIPTION}<br/>`;
     });

     // 将生成的HTML插入到DOM容器中
     document.querySelector('.form-check').innerHTML = radioDecision + `
       <div class="valid-feedback">Completed!</div>
       <div class="invalid-feedback">Please make a selection.</div>
     `;
  })
  .catch((error) => {
     toastr["error"]("Something went wrong.", "Error");
  });

方案2:DOM插入后通过JS设置选中状态(适合decision后续才确定的场景)

如果decision确实是在DOM插入之后才设置的,可通过DOM查询找到对应单选按钮并设置checked属性:

let radioDecision = '';
let decision; // 后续会赋值的变量

// 完成数据获取与DOM插入
fetch('URL', options)
  .then(response => response.json())
  .then(data => {
     Object.entries(data).forEach(([key, value]) => {
       // 设置唯一id
       radioDecision += `<input type="radio" id="decision_${value.CODE}" name="decision" class="form-check-input" value="${value.CODE}" required> ${value.DESCRIPTION}<br/>`;
     });

     document.querySelector('.form-check').innerHTML = radioDecision + `
       <div class="valid-feedback">Completed!</div>
       <div class="invalid-feedback">Please make a selection.</div>
     `;

     // 如果此时decision已经赋值,直接调用设置函数
     if (decision) {
       setCheckedRadio(decision);
     }
  })
  .catch((error) => {
     toastr["error"]("Something went wrong.", "Error");
  });

// 设置选中状态的工具函数
function setCheckedRadio(decisionValue) {
  // 通过name和value属性定位单选按钮
  const targetRadio = document.querySelector(`input[name="decision"][value="${decisionValue}"]`);
  if (targetRadio) {
    targetRadio.checked = true;
  }
}

// 后续某个时机设置decision并触发选中
decision = 'N';
setCheckedRadio(decision);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:58:10