CodeIgniter动态依赖下拉框获取值却显示空白问题求助
解决CodeIgniter动态依赖下拉框不显示选项的问题
我帮你定位到了几个关键问题,咱们一步步来修复:
1. AJAX成功回调的赋值错误
你在JS的success函数里错误地把服务ID塞给了下拉框,而不是控制器返回的选项HTML。这是最核心的问题:
修正后的JS代码:
$('#servID').on('change', function(){ var servID = $(this).val(); if(servID == '') { $('#servPRO').attr('disabled', true); } else { $('#servPRO').attr('disabled', false); $.ajax({ url:"<?php echo base_url() ?>get_procedures", type: "POST", data: {'servID' : servID}, dataType: 'html', success: function(data){ $('#servPRO').html(data); // 这里改成返回的data! }, error: function(){ alert('Error occur...!!'); } }); } });
2. 控制器里的HTML实体转义错误
你用了<和>来拼接选项,这会让返回的内容变成纯文本字符,浏览器无法解析成HTML标签。应该直接用<和>:
修正后的控制器代码:
public function get_procedures() { $servID = $this->input->post('servID'); $result = $this->Laboratory_Model->get_all_products1($servID); if(count($result)>0) { $pro_select_box = ''; $pro_select_box .= '<option value="">Select Procedure</option>'; foreach ($result as $rows) { // 建议value只存itemNum,避免逗号/空格导致后续取值问题 $pro_select_box .= '<option value="'.$rows->itemNum.'">'.$rows->prodName.'</option>'; } echo $pro_select_box; } // 无数据时返回提示选项 else { echo '<option value="">No procedures found</option>'; } }
3. 视图里的HTML结构错误
你的视图代码里多了一个多余的</select>标签,会破坏HTML结构,影响下拉框渲染:
修正后的视图代码:
<select name="servID" id="servID" class="form-control" data-live-search="true"> <option value=''>-Select Category-</option> <?php foreach($service as $rows): ?> <option value='<?php echo $rows->servID?>'><?php echo $rows->service_cat?></option> <?php endforeach ?> </select> <!-- 删掉原来多余的</select> --> <select class="form-control" name="servPRO" id="servPRO"> </select>
额外优化建议
- 模型代码可以简化,不需要额外判断行数:
public function get_all_products1($servID){ return $this->db->get_where('laboratory', array('servID' => $servID))->result(); }
- 可以给
servPRO下拉框加初始提示选项,比如<option value="">Select Procedure</option>,提升用户体验。 - 调试时可以在控制器里用
var_dump($result)确认是否拿到了正确的数据,排查模型查询问题。
按照这些修改后,你的动态依赖下拉框应该就能正常显示选项了!
内容的提问来源于stack exchange,提问作者DrkProgramming
相关产品推荐
相关产品推荐

