求助:基于JQuery/JS实现单选框选择控制文本显示及动态显隐单选组
求助:基于JQuery/JS实现单选框选择控制文本显示及动态显隐单选组
首先,先帮你解决最紧急的type1单选组显隐问题,你之前的代码有两个关键错误:
- 选择器错误:
$('type_1')这种写法根本选不到元素,因为type1是单选框的name属性,建议给对应的label容器加个ID,比如<label id="type1-group" for="type1">,这样就能用$('#type1-group')精准选中整个组。 - 条件判断逻辑颠倒+字符串判断问题:你的
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
相关产品推荐
相关产品推荐

