CodeIgniter新增/编辑页实现多选联动下拉菜单方案咨询
多选联动下拉改造方案
该功能可直接实现,只需调整AJAX逻辑与模型查询逻辑即可,具体修改步骤如下:
1. AJAX代码修改
多选下拉的val()方法默认返回选中值的数组,可直接传给后端,只需新增子分类默认提示项、如果使用了selectpicker插件要新增刷新逻辑:
$(document).ready(function() { $('#category_id').change(function() { var category_id = $(this).val(); $.ajax({ url: "<?php echo site_url('admin/get_sub_category');?>", method: "POST", data: { category_id: category_id }, async: true, dataType: 'json', success: function(data) { // 先加默认隐藏的提示选项 var html = '<option value="" hidden><?php echo get_phrase('select subcategory'); ?></option>'; var i; for (i = 0; i < data.length; i++) { html += '<option value=' + data[i].idsubcategory + '>' + data[i].subcategory_name + '</option>'; } $('#idsubcategory').html(html); // 如果子分类也用了selectpicker插件,取消注释下面这行刷新渲染 // $('#idsubcategory').selectpicker('refresh'); } }); return false; }); });
2. 模型层代码修改
原查询只支持单个分类ID匹配,修改为支持数组查询,兼容单选/多选场景:
function get_sub_category($category_id){ // 空选择直接返回空结果 if(empty($category_id)){ return $this->db->where('category_id', 0)->get('sub_category'); } // 统一转成数组,兼容单ID/多ID数组传入 $category_id = (array)$category_id; // 用where_in匹配多个分类ID的子分类 $query = $this->db->where_in('category_id', $category_id)->get('sub_category'); return $query; }
3. 控制器代码无需修改
原控制器逻辑可直接复用,不需要调整。
可选优化
- 如果需要保留用户之前选中的子分类,可在替换option后遍历原选中值,匹配到新列表的选项自动设置
selected属性 - 分类未选中任何选项时,可直接禁用子分类下拉,避免无效操作
内容的提问来源于stack exchange,提问作者Dileep
相关产品推荐
相关产品推荐

