讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在编辑记录时从数据库加载并高亮显示已选列表项

云晨姑娘_5630

云晨姑娘_5630

发布时间:2026-07-31 13:50:07

|

271人浏览过

|

来源于php中文网

原创

如何在编辑记录时从数据库加载并高亮显示已选列表项

本文介绍在使用 Bootstrap 模态窗编辑记录时,通过 AJAX 从数据库获取已关联的选项 ID,并在前端下拉列表(<select>)中精准高亮对应 <option> 元素的完整实现方案。

本文介绍在使用 bootstrap 模态窗编辑记录时,通过 ajax 从数据库获取已关联的选项 id,并在前端下拉列表(`

在 Web 表单编辑场景中,常需回显“多对多”关系数据(例如:旅游设施关联的多种配套类型)。典型需求是:打开编辑模态窗后,自动加载该记录在数据库中已勾选的 acomp_type_id 列表,并在 <select class="acomp_types"> 下拉框中将对应 <option> 标记为黄色背景,以直观提示用户当前选中状态。

但原始代码存在两个关键问题:

  1. 数据结构误判:AJAX 返回的是对象数组(如 [{"acomp_type_id":"1"}, ...]),而原逻辑直接用 $.inArray(item_id, selected_items) 尝试匹配字符串与对象,必然失败;
  2. DOM 查找逻辑错误:$("#modal_form").find(".acomp_types") 匹配的是整个 <select> 元素,而非其内部 <option>,且后续用 data("acomp_type_id") 试图从 <select> 上读取属性,不符合 HTML 结构。

✅ 正确做法是:

  • 在 AJAX 成功回调中遍历 selected_items 数组,提取每个对象的 acomp_type_id 字段;
  • 使用原生 DOM 或 jQuery 精准定位 <select id="acomp_types"> 下 value 匹配的 <option> 元素;
  • 直接设置其 style.backgroundColor = "yellow" 实现高亮。

以下是优化后的完整 JavaScript 逻辑(兼容 jQuery 且更健壮):

$('#modal_form').on('shown.bs.modal', function () {
    const myID = id; // 确保 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) {
            // 安全获取 select 元素(推荐使用 ID 而非 class,避免歧义)
            const $select = $("#acomp_types");
            if ($select.length === 0) return;

            // 遍历返回的每个对象,提取 acomp_type_id
            $.each(selected_items, function(index, item) {
                const acompTypeId = item.acomp_type_id;
                // 查找 value 匹配的 option 并高亮
                const $option = $select.find(`option[value="${acompTypeId}"]`);
                if ($option.length) {
                    $option.css("backgroundColor", "yellow");
                    // 可选:同步选中状态(若需默认选中)
                    $option.prop("selected", true);
                }
            });
        },
        error: function(xhr) {
            console.warn("Failed to load selected items:", xhr.responseText);
        }
    });
});

? 重要注意事项:

  • 后端 PHP 方法 highlight_selected_items() 已正确返回 JSON 数组,无需额外 JSON.parse();
  • 前端务必确保 <select> 元素具有唯一 id="acomp_types"(而非仅靠 class),否则 getElementById 或 $("#acomp_types") 可能失效;
  • 若下拉项由动态渲染生成,请确保 AJAX 执行前 DOM 已就绪(shown.bs.modal 事件已保证模态窗完全显示);
  • 生产环境建议使用 CSS 类(如 .selected-option { background: #fff9c4; })替代内联样式,便于主题维护;
  • 为防止 XSS,acompTypeId 若含特殊字符(如引号),应使用 encodeURIComponent 或服务端转义,但此处 ID 为数字,可暂不处理。

通过以上实现,即可在编辑时精准还原数据库中的多选状态,并提供清晰的视觉反馈,显著提升用户体验与数据一致性。

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
servlet生命周期
servlet生命周期

Servlet生命周期是指Servlet从创建到销毁的整个过程。本专题为大家提供servlet生命周期的各类文章,大家可以免费体验。

1171

2023.08.08

mybatis一级缓存和二级缓存
mybatis一级缓存和二级缓存

在MyBatis中,一级缓存和二级缓存是两种不同级别的缓存机制,它们都可以用来提高性能。本专题提供mybatis一级缓存和二级缓存相关文章,大家可以免费阅读。

583

2023.08.21

ibatis和mybatis有什么区别
ibatis和mybatis有什么区别

ibatis和mybatis的区别:1、基本信息不同;2、开发时间不同;3、功能与易用性;4、配置文件;5、入参类型与出参类型;6、返回结果集接受方式;7、语法差异;8、数据库方言支持;9、插件支持;10、社区活跃度;11、全球化支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2242

2024.02.23

mybatis如何配置数据库连接
mybatis如何配置数据库连接

mybatis配置数据库连接的方法:1、指定数据源;2、配置事务管理器;3、配置类型处理器和映射器;4、使用环境元素;5、配置别名。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

446

2024.02.23

mybatis工作原理及流程是什么
mybatis工作原理及流程是什么

mybatis工作原理及流程:1、配置文件;2、接口与映射;3、sql解析与生成;4、执行计划;5、结果处理;6、动态sql;7、缓存机制;8、插件;9、事务管理;10、日志与监控;11、扩展性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

292

2024.02.23

hibernate和mybatis有哪些区别
hibernate和mybatis有哪些区别

hibernate和mybatis的区别:1、实现方式;2、性能;3、对象管理的对比;4、缓存机制。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

302

2024.02.23

Java MyBatis框架
Java MyBatis框架

本专题专注于Java主流ORM框架MyBatis的应用,系统讲解SQL映射、动态SQL、结果映射、分页查询、缓存机制与多表关联等核心内容,并结合企业管理系统、电商平台和后台管理项目实战,帮助学员全面掌握高效的数据库持久层开发技能。

5409

2025.08.26

jsp分页功能如何实现
jsp分页功能如何实现

当数据有几万、几十万甚至上百万时,户必须要拖动页面才能浏览更多的数据,很大程度的影响了户体验。这时可以使用分页来显示数据,能够使数据更加清晰直观,环受数量的限制。php中文网为大家带来了jsp分页功能相关教程、以及相关文章等内容,供大家免费下载使用。

297

2023.06.21

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
jQuery官方API文档
jQuery官方API文档

共0课时 | 0人学习

极客学院jquery零基础入门视频教程
极客学院jquery零基础入门视频教程

共29课时 | 6.7万人学习

布尔教育jQuery实战视频教程
布尔教育jQuery实战视频教程

共37课时 | 9.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn