You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何根据下拉列表的特定选项值显示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

火山引擎 最新活动