jQuery二级联动下拉框刷新后未选一级项全显异常修复
问题根因
- 现有逻辑仅在用户手动操作一级下拉框触发
change事件时才执行二级选项过滤,页面首次加载、刷新后没有主动执行过滤逻辑,因此二级下拉框默认展示全部选项。 - 浏览器刷新页面时会自动回填下拉框的历史选中值,但这个自动回填行为不会触发元素的
change事件,导致联动逻辑不会自动执行。
修复方法
在DOM加载完成后,主动触发一次#department的change事件,让页面初始化阶段就执行一次联动过滤,即可同时解决两个问题。额外补充两个实用优化:
- 过滤二级选项前先清空二级下拉框的已选值,避免刷新后残留不属于当前部门的无效选中项
- 给隐藏的option加上
disabled属性,解决部分浏览器不支持display:none隐藏option的兼容性问题
修复后的完整代码如下:
<script> $(function () { // 部门-方案下拉联动逻辑 $('#department').on('change', function () { const currentDept = $('option:selected', this).attr('attr'); // 清空二级下拉原有选中值 $('#schemes').val(''); $("#schemes option").each(function () { if ($(this).attr('subattr') == currentDept) { $(this).css({ display: "block" }).prop('disabled', false); } else { $(this).css({ display: "none" }).prop('disabled', true); } }); }); // 页面初始化/刷新后主动触发一次联动 $('#department').trigger('change'); }); </script>
补充:如果一级下拉框默认有「请选择部门」这类空值选项,可以在change回调里加一层判断,选中空值时直接禁用整个二级下拉框,从交互上避免用户在没选部门的情况下点击二级框。
内容的提问来源于stack exchange,提问作者user19014116
相关产品推荐
相关产品推荐

