如何根据下拉列表的特定选项值显示custom_25文本字段
如何根据下拉列表的特定选项值显示custom_25文本字段
Hey,我看了你的需求和代码,问题主要出在事件绑定、选择器以及逻辑判断上,我帮你调整一下,这样就能实现选择指定选项时显示custom_25文本框,其他情况隐藏它啦!
先说说你原来代码的几个小问题:
- 事件绑定写法错了:你用了
click('change', ...),这不符合jQuery事件绑定的规范,而且应该监听原生的<select>元素(也就是#custom_24)的change事件,而不是#select2-results——毕竟Select2是基于原生select封装的,监听原生元素的事件更可靠 - 选择器不对:
$('value==2')这种写法根本没法正确获取选中的选项,得通过select元素的val()方法来拿当前选中的值 - 逻辑可以更简化:嵌套的if没必要,直接判断选中值是否在我们需要的列表里就行
修正后的完整方案:
首先,先给custom_25的容器加个默认隐藏的样式(这样页面一开始就不会显示它):
<div id="editrow-custom_25" class="crm-section editrow_custom_25-section form-item" style="display: none;"> <div class="label" style="display: none;"><label for="custom_25">Medical Service Specifics</label></div> <div class="edit-value content"> <input data-crm-custom="Volunteer_Registeration:Medical_Service_Specifics" maxlength="255" name="custom_25" type="text" id="custom_25" class="crm-form-text" placeholder="Medical Service Specifics"> </div> <div class="clear"></div> </div>
然后是JavaScript代码,放在页面底部或者$(document).ready()里:
$(document).ready(function() { // 监听下拉框的change事件 $('#custom_24').on('change', function() { // 获取当前选中的选项值 const selectedVal = $(this).val(); // 定义需要显示文本框的目标选项值集合 const showValues = ['2', '5', '7']; // 判断当前值是否在目标集合里,决定显示/隐藏 if (showValues.includes(selectedVal)) { $('#custom_25').closest('.crm-section').show(); } else { $('#custom_25').closest('.crm-section').hide(); } }); // 页面加载完成后,手动触发一次change事件,确保初始状态正确 $('#custom_24').trigger('change'); });
为什么这么写更靠谱:
- 监听原生select的
change事件:不管用户是通过Select2的下拉界面选择,还是其他方式修改选中值,这个事件都会触发,不会漏掉状态变化 - 用数组管理目标值:以后要加/减需要显示文本框的选项,直接修改
showValues数组就行,不用改逻辑代码,维护起来更方便 - 操作整个
.crm-section容器:因为你的文本框是放在这个section里的,直接显示/隐藏整个区域,比只操作input更符合页面的布局逻辑,不会出现样式错乱的问题
这样调整后,就能完美实现你要的效果啦!
备注:内容来源于stack exchange,提问作者Garuda Consulting




