编辑记录时如何高亮Modal中数据库选中项?无法获取acomp_types列表
解决Modal中无法高亮Ajax返回的选中项问题
你的问题核心在于Ajax返回的是对象数组,而你直接用$.inArray去匹配ID值,导致无法找到对应项。
返回的响应数据结构是:
[{"acomp_type_id":"1"},{"acomp_type_id":"2"},{"acomp_type_id":"3"},{"acomp_type_id":"4"},{"acomp_type_id":"5"},{"acomp_type_id":"6"},{"acomp_type_id":"7"},{"acomp_type_id":"8"},{"acomp_type_id":"9"}]
$.inArray(item_id, selected_items)是在数组中查找值是否存在,但selected_items里的每一项都是包含acomp_type_id属性的对象,不是纯ID字符串/数字,所以永远匹配不到目标项。
修复方案(两种可选)
方案一:前端处理返回数据
在Ajax的success回调中,先将对象数组转换为纯ID数组,再进行匹配:
修改后的前端代码:
$('#modal_form').on('shown.bs.modal', function () { var myID = id; $.ajax({ url : "<?php echo base_url('index.php/tourist_facilities/highlight_selected_items')?>/", type: "GET", dataType: "json", data:{id:myID}, success: function(selected_items) { // 将对象数组转换为纯ID数组 var selectedIds = selected_items.map(item => item.acomp_type_id); var $acomp_types = $("#modal_form").find(".acomp_types"); $acomp_types.each(function() { var item_id = $(this).data("acomp_type_id"); // 统一类型:将data获取的ID转为字符串,和返回值保持一致 item_id = String(item_id); if ($.inArray(item_id, selectedIds) !== -1) { $(this).addClass("selected"); } }); } }); });
方案二:后端直接返回ID数组(更高效)
修改后端函数,直接提取acomp_type_id组成纯数组再返回,减少前端处理步骤:
修改后的后端代码:
public function highlight_selected_items() { $id = $this->input->get('id'); $query_result = $this->db->query("SELECT acomp_type_id FROM tourist_accompanying_types where tf_ID=$id")->result_array(); // 提取acomp_type_id字段,组成纯ID数组 $selected_items = array_column($query_result, 'acomp_type_id'); echo json_encode($selected_items); }
修改后返回的响应会变成纯ID数组:["1","2","3","4","5","6","7","8","9"],此时你原来的前端代码中的$.inArray就能正常匹配了。
额外注意事项
- 确保
.acomp_types元素的data-acomp_type_id属性值与返回的ID类型一致(均为字符串或均为数字),避免因类型不匹配导致匹配失败。 - 代码中冗余的
$(this).attr("data-selected_item", item_id);可以删除,这行对高亮逻辑没有帮助。
内容的提问来源于stack exchange,提问作者Wesam Beshir
相关产品推荐
相关产品推荐

