layui+jsp项目中实现table单元格嵌入下拉选择框功能,下拉选择框可手动输入内容或选择默认值,修改后数据正常回显。

news2024/11/18 6:23:54

需求

table列表中的数据实现下拉框修改数据,当默认的下拉框不符合要求时,可手动输入内容保存。内容修改后表格显示修改后的值同时表格不刷新。

实现

  • layui框架下拉框组件只能选择存在的数据,不支持将输入的内容显示在input中的功能,通过拼接输入框和下拉框实现该功能。
  • 因使用输入框和下拉框实现,修改数据逻辑也分为两套。
    • 输入框:检测input输入框失去焦点时调用更新接口。
    • 下拉框:下拉框检测到选择后调用更新接口。
  • 功能要求不刷新表格,因此使用var inputField = tr.find('.input-id-key'); inputField.val(data.value);修改表格显示。
  • 使用自定义组件查询出的数据不能正常回显在单元格中,使用var inputField = row.querySelector('.input-id-key');直接修改页面显示。

效果如下图,样式需自己修改。
在这里插入图片描述

实现代码

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- 引入LayUI -->
    <link rel="stylesheet" href="plugins/layui2.4.5/css/layui.css" media="all">
</head>
<body class="no-skin">
<script src="plugins/layui2.4.5/layui.js" charset="utf-8"></script>
<!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
</body>
<!-- 自定义下拉框组件 -->
<script type="text/html" id="selectTpl">
    <div class="layui-form-item">
        <input type="text" id="input_id_key" name="key" placeholder="计划数量修改原因"
               autocomplete="off" class="layui-input input-id-key"
               style="position:absolute;z-index:2;width:80%;">
        <select type="text" id="selectOptions" lay-filter="hc_select" autocomplete="off"
                placeholder="" class="layui-select" style="color:#000000">
            <option value="" disabled selected>请选择或输入</option>
            {{# layui.each(d.dictionaryOptions, function(index, item){ }}
            <option value="{{item.name}}">{{item.name}}</option>
            {{# }); }}
        </select>
    </div>
</script>
<script>
    function tdTitle() {
        $('th').each(function (index, element) {
            $(element).attr('title', $(element).text());
        });
        $('td').each(function (index, element) {
            $(element).attr('title', $(element).text());
        });
    };
    layui.use(['form', 'layedit', 'laydate', 'table', 'element', 'util'], function () {
        var $ = layui.jquery;
        var table = layui.table;
        var form = layui.form;
        var element = layui.element;
        // 初始化下拉选项数据
        var dictionaryOptions = [];
        // 从接口获取下拉选项数据
        $.ajax({
            url: '/oms/...', // 获取下拉选择框列表接口
            method: 'GET',
            success: function (res) {
                dictionaryOptions = res; // 返回的数组赋值到dictionaryOptions
                form.render('select'); // 更新渲染
            }
        });
        $(document).ready(function () {
            initTab();
            var cols = [[
                {type: 'numbers'},
                {
                    field: 'reason', title: '计划数量修改原因', width: 200, templet: function (d) {
                        d.dictionaryOptions = dictionaryOptions; // 将选项数据绑定到当前行数据
                        return layui.laytpl(document.getElementById('selectTpl').innerHTML).render(d);
                    }
                },
                ......
            ]];
            var type = '';
            initTable1(type, cols);
        });
        //选择框选择后执行,通过获取tr找到对应行的单元格,否则只会修改第一行数据
        form.on('select(hc_select)', function (data) {
            var tr = $(data.elem).closest('tr'); // 确保这能准确找到最近的tr元素
            var index = tr.data('index'); // 使用jQuery的data方法来获取data-index
            var inputField = tr.find('.input-id-key'); // 直接在tr内查找input
            if (inputField.length > 0) {//确保查找到input
                inputField.val(data.value); // 更新值
            } else {
                console.error('未找到指定的输入框。');
            }
            var rowData = table.cache['demoEvent'][index]; // 获取修改单元格的整行数据,调用修改接口时可能需要其他字段
            updateReason(rowData,data.value)//修改逻辑接口
        });
        //鼠标移出输入框执行
        $(document).ready(function () {
            // 使用事件委托方式绑定 blur 事件
            $(document).on('blur', '#input_id_key', function () {
                var inputValue = $(this).val();//单元格输入的值
                var cell = $(this).closest('td');
                var row = cell.closest('tr');
                var rowIndex = row.index(); //行索引
                var rowData = table.cache['demoEvent'][rowIndex];//获取修改单元格的整行数据
                updateReason(rowData,inputValue)//修改逻辑接口
            });
        });
        //table默认加载
        function initTable1(orderType, cols) {
            table.render({
                elem: '#test'
                , url: '/oms/...'
                , height: 'full-150'
                , toolbar: '#myToolbar'
                , cols: cols,
                id: 'demoEvent'
                , where: {
                }
                , page: {
                    layout: ['prev', 'page', 'next', 'countPage', 'count', 'skip'] //自定义分页布局
                    , groups: 2 //只显示 1 个连续页码
                    , first: false //不显示首页
                    , last: false //不显示尾页
                }
                , limit: 100
                , done: function (res, curr, count) {
                    if (res.data.length > 0) {
                        // 获取表格的tbody元素
                        var tbody = document.querySelector('#test').nextElementSibling.querySelector('tbody');
                        for (var i = 0; i < res.data.length; i++) {
                            var row = tbody.rows[i];
                            if (row) {
                                // 获取该行的输入框
                                var inputField = row.querySelector('.input-id-key');
                                if (inputField) {
                                    // 回显输入框的值
                                    inputField.value = res.data[i].reason;
                                }
                            }
                        }
                    }
                    tdTitle();
                }
            });
        }
    });
</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1882591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于IMX8MPlus SMARC核心板的便携式床旁超声诊断仪应用解决方案

医学的高速发展&#xff0c;使得超声仪器得到了广泛的普及&#xff0c;便携式的床旁超声诊断仪&#xff0c;不仅满足临床医学对可视化、便携式、智能化的需求&#xff0c;还能满足基层患者随时随地快速筛查的需求。 便携式的床旁超声诊断仪&#xff0c;移动灵活方便&#xff0c…

Steam商店报错、进不去 Steam105错误代码的处理方法

逛Steam商店现在已然成为大部分游戏玩家每日必做的事情之一&#xff0c;玩家们在商店浏览、购买并享受各种类型的游戏和应用&#xff0c;找到适合自己的一款&#xff0c;最近steam夏促活动正在进行&#xff0c;很多玩家都前往Steam商店查看各种低价游戏&#xff0c;但是很多玩家…

C++(第一天-----命名空间和引用)

一、C/C的区别 1、与C相比   c语言面向过程&#xff0c;c面向对象。   c能够对函数进行重载&#xff0c;可使同名的函数功能变得更加强大。   c引入了名字空间&#xff0c;可以使定义的变量名更多。   c可以使用引用传参&#xff0c;引用传参比起指针传参更加快&#…

潜水耳机哪个牌子好?用户精选,这四款潜水耳机质量上乘!

在这个快节奏的时代&#xff0c;人们越来越渴望在运动中也能享受到音乐的陪伴。潜水&#xff0c;作为一种独特的水下运动&#xff0c;自然也不例外。然而&#xff0c;并非所有的耳机都能承受水下的压力和环境&#xff0c;这就要求我们对潜水耳机有着更高的要求。作为一名资深的…

美团外卖搜索基于Elasticsearch的优化实践--图文解析

美团外卖搜索基于Elasticsearch的优化实践–图文解析 前言 美团在外卖搜索业务场景中大规模地使用了 Elasticsearch 作为底层检索引擎&#xff0c;随着业务量越来越大&#xff0c;检索速度变慢了&#xff0c;CPU快累趴了&#xff0c;所以要进行优化。经过检测&#xff0c;发现…

揭秘LLaMA 2:深度学习的未来,从原理到模型训练的全面剖析

引言 LLaMA&#xff08;Large Language Model for AI Assistance&#xff09;2 是 Meta&#xff08;原 Facebook&#xff09;开发的一个大型语言模型&#xff0c;旨在为各种自然语言处理任务提供强大的支持。它在前代基础上进行了改进&#xff0c;具有更好的性能和更广泛的应用…

LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection

LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection 论文链接&#xff1a;http://arxiv.org/abs/2406.03459 代码链接&#xff1a;https://github.com/Atten4Vis/LW-DETR 一、摘要 介绍了一种轻量级检测变换器LWDETR&#xff0c;它在实时物体检测方面超越…

Flutter集成高德导航SDK(Android篇)(JAVA语法)

先上flutter doctor&#xff1a; flutter sdk版本为&#xff1a;3.19.4 引入依赖&#xff1a; 在app的build.gradle下&#xff0c;添加如下依赖&#xff1a; implementation com.amap.api:navi-3dmap:10.0.700_3dmap10.0.700navi-3dmap里面包含了定位功能&#xff0c;地图功能…

技术反诈指南丨央视报了!基于“AI换脸”的新型电信网络诈骗猖獗

目录 利用“AI换脸”技术的诈骗 技术上防范新型电信网络诈骗 内蒙古鄂尔多斯市居民李女士近日遭遇了一起新型电信网络诈骗案。诈骗团伙利用“AI换脸”技术&#xff0c;合成了与李女士老同学相似的视频通话&#xff0c;以此作为诈骗的关键手段&#xff0c;成功骗取李女士信任。 …

[数据质量]手动实现 阿里云DataWorks 的数据质量监控告警功能

目录 手动实现 DataWorks 的数据质量监控告警功能1. 简介:2. 数据表准备2.1 tmp_monitor_tbl_info (数据监控信息表)2.2 tmp_monitor_rule_info (数据质量监控规则表)2.3 tmp_monitor_tbl_info_log_di (数据监控信息记录表) 3. 程序开发3.1 数据检查程序3.2 告警信息推送程序3.…

Navcat Premium17破解安装及数据库连接教程

一、前言 Navicat Premium 是一套数据库开发工具&#xff0c;是一个可多重连接数据库的管理工具。Navicat Premium让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。目前17已经支持了很久都没有支持的Redis数据库了。…

大数据之Zookeeper部署

文章目录 集群规划环境准备集群部署参考资料 集群规划 确定使用Hadoop101、hadoop102和hadoop103三台服务器来构建Zookeeper集群。 hadoop101hadoop102hadoop103zookeeperzookeeperzookeeper 环境准备 安装zookeeper前需要确保下面的环境配置成功&#xff0c;具体可以参考大…

七一建党节|热烈庆祝中国共产党成立103周年!

时光荏苒&#xff0c;岁月如梭。 在这热情似火的夏日&#xff0c; 我们迎来了中国共产党成立103周年的重要时刻。 这是一个值得全体中华儿女共同铭记和庆祝的日子&#xff0c; 也是激励我们不断前进的重要时刻。 103年&#xff0c; 风雨兼程&#xff0c;砥砺前行。 从嘉兴…

五种肉苁蓉属植物叶绿体基因组-文献精读25

Structural mutations of small single copy (SSC) region in the plastid genomes of five Cistanche species and inter-species identification 五种肉苁蓉属植物叶绿体基因组中小单拷贝 (SSC) 区域的结构突变及物种间鉴定 摘要 背景 肉苁蓉属是列当科的重要属类&#xf…

小型气象站:便携、高效的气象监测新选择

在气象监测领域&#xff0c;一款小巧而功能全面的设备正逐渐受到广泛关注——那就是小型气象站。它不仅体积小巧、重量轻&#xff0c;而且采用了众多先进技术&#xff0c;使其在气象数据的采集、传输和分析中展现出强大的能力。 小型气象站之所以备受青睐&#xff0c;首先得益于…

error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main_getcmdline 中被引用

VC MFC情况下出现此问题&#xff0c; 网上搜索了很多文章无法解决。 error LNK2019: 无法解析的外部符号 _SDL_main&#xff0c;该符号在函数 _main_utf8 中被引用_sdl2main.lib出现无法解析的外部符号-CSDN博客 字符集必须设置为&#xff1a;

交叉编译 tcpdump libpcap

文章目录 交叉编译 tcpdump & libpcap概述源码下载交叉编译 libpcap交叉编译 tcpdump 交叉编译 tcpdump & libpcap 概述 tcpdump 是一个强大的命令行包分析器&#xff0c;libpcap 是一个可移植的用于网络流量捕获的 C/C 库。tcpdump 依赖于 libpcap 库&#xff0c;同…

Jenkins接口自动化项目的工程创建

jenkins的下载安装 jenkins下载的官网地址 https://www.jenkins.io/download/ java环境变量的配置下载 jenkins是用java语言编写的所以要配置java环境 需要安装java的JDK 推荐安装JDK17(https://blog.csdn.net/wochunyang/article/details/138520209) JDK17的下载地址 ht…

红黑树模拟

1.红黑树概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但每个节点上增加了一个存储位表示结点的颜色&#xff0c;可以是RED或BLACK。通过任何一条根到叶子节点的途径上各个节点的着色方式的限制&#xff0c;红黑树确保没有一条路径会超过其他路径的二倍&#xff0c;因…

基于Cisco模拟器的组网实验

课程目的 综合运用所学的网络原理、网络规划和网络集成等知识理论&#xff0c;按照下图所示&#xff0c;完成网络的规划、集成与配置&#xff0c;并利用ACL实现对网络的管理。 实验内容 连接并配置路由器&#xff0c;配置路由协议&#xff08;RIP或OSPF&#xff09;&#xf…