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

求助:基于JQuery/JS实现单选框选择控制文本显示及动态显隐单选组

求助:基于JQuery/JS实现单选框选择控制文本显示及动态显隐单选组

首先,先帮你解决最紧急的type1单选组显隐问题,你之前的代码有两个关键错误:

  1. 选择器错误:$('type_1')这种写法根本选不到元素,因为type1是单选框的name属性,建议给对应的label容器加个ID,比如<label id="type1-group" for="type1">,这样就能用$('#type1-group')精准选中整个组。
  2. 条件判断逻辑颠倒+字符串判断问题:你的pc_allergy选项里,「Ja」对应的是value="false",「Nej」是value="true",而且val()返回的是字符串,"false"也是非空字符串,所以你写的if(checked)会永远为真,不管选什么都不会隐藏。

修正后的显隐代码

先修改HTML,给type1的label加ID:

<div class = "empirisk">
  <label for="prosthesis">Does the patient have a prosthesis?<br>
    <input type="radio" name="prosthesis" value="false" >
    <span>Ja</span>
    <input type="radio" name="prosthesis"  value="true" checked>
    <span>Nej</span><br><br>
  </label>

  <label for="sa_sannolik">Is s.aureus most probable?<br>
    <input type="radio" name="sa_sannolik" value="false" checked>
    <span>Ja</span>
    <input type="radio" name="sa_sannolik"  value="true" >
    <span>Nej</span><br><br>
  </label>

  <label for="pc_allergy">Does the patient have a penicillin allergy?<br>
    <input type="radio" name="pc_allergy" value="false" >
    <span>Ja</span>
    <input type="radio" name="pc_allergy"  value="true" checked>
    <span>Nej</span><br><br>
  </label>

  <label id="type1-group" for="type1">Is it a type-1 allergy?<br>
    <input type="radio" name="type1" value="false">
    <span>Ja</span>
    <input type="radio" name="type1"  value="true" checked>
    <span>Nej</span><br><br>
  </label>
</div>

然后修改JS的显隐逻辑,同时初始化时先隐藏type1组(因为默认pc_allergy选的是Nej):

// 初始化隐藏type1组
$('#type1-group').hide();

// 监听pc_allergy单选变化
$('input[name="pc_allergy"]').change(function() {
  const checkedVal = $(this).val();
  // 当选Ja(value="false")时显示,否则隐藏
  if (checkedVal === "false") {
    $('#type1-group').show();
  } else {
    $('#type1-group').hide();
  }
  // 每次变化都触发统一的文本判断函数
  updateResultText();
});

统一处理所有单选变化,动态显示对应文本

接下来实现你要的「每次点击任何单选都触发判断」的需求,我们可以写一个通用的updateResultText()函数,每次单选变化时调用它,收集所有选中的值,再通过条件判断输出对应文本。

首先在HTML里加一个用来显示结果的容器:

<div id="result-text" style="margin-top: 20px; padding: 10px; border: 1px solid #ccc;"></div>

然后写JS函数:

// 监听所有单选框的变化
$('input[type="radio"]').change(function() {
  updateResultText();
});

// 统一处理结果文本的函数
function updateResultText() {
  // 收集所有选中的单选值,用对象存更清晰
  const selections = {
    prosthesis: $('input[name="prosthesis"]:checked').val(),
    sa_sannolik: $('input[name="sa_sannolik"]:checked').val(),
    pc_allergy: $('input[name="pc_allergy"]:checked').val(),
    // 只有当type1组显示时才取值,否则设为null
    type1: $('#type1-group').is(':visible') ? $('input[name="type1"]:checked').val() : null
  };

  let result = "";

  // 这里根据你的业务逻辑写判断,举几个例子:
  if (selections.pc_allergy === "false") {
    // 有青霉素过敏的情况
    if (selections.type1 === "false") {
      result = "患者有1型青霉素过敏,需更换替代抗生素";
    } else {
      result = "患者有非1型青霉素过敏,可考虑脱敏治疗";
    }
  } else {
    // 无青霉素过敏的情况
    if (selections.sa_sannolik === "false") {
      result = "优先选用针对金黄色葡萄球菌的青霉素类药物";
    } else {
      result = "常规广谱抗生素治疗即可";
    }
    // 再结合prosthesis的情况补充
    if (selections.prosthesis === "false") {
      result += ",患者有假体,需注意感染扩散风险";
    }
  }

  // 把结果放到页面上
  $('#result-text').text(result);
}

// 页面加载完成后先执行一次,显示初始结果
$(document).ready(function() {
  updateResultText();
});

这样修改后,不仅能正确控制type1组的显隐,还能实时根据所有单选的组合动态更新结果文本。你可以根据实际的业务逻辑,补充更多的条件判断分支即可。

备注:内容来源于stack exchange,提问作者Olof

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:12:35