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

JavaScript/jQuery动态生成带颜色表格并实现点击次数控制

云墨姑娘_5641

云墨姑娘_5641

发布时间:2025-11-18 11:04:24

|

1005人浏览过

|

来源于php中文网

原创

javascript/jquery动态生成带颜色表格并实现点击次数控制

本文将详细介绍如何使用JavaScript和jQuery实现动态生成HTML表格、为表格应用随机或特定颜色样式,并精确控制表格的生成数量。我们将通过一个实际案例,展示如何结合事件监听、DOM操作和计数器逻辑,构建一个功能完善的动态UI组件,同时提供代码示例和最佳实践建议。

1. 引言

在现代Web开发中,动态生成和管理页面元素是常见的需求。例如,根据用户操作添加新的数据行、表单字段或整个组件。本教程将聚焦于一个具体场景:用户点击按钮时动态生成表格,并要求每个表格具有不同的背景颜色,同时限制表格的最大生成数量。我们将利用jQuery简化DOM操作,并结合原生JavaScript实现颜色生成和逻辑控制。

2. 核心需求分析

根据问题描述,我们需要实现以下功能:

  1. 动态生成表格: 用户点击特定按钮时,向页面中追加一个新的表格。
  2. 表格颜色多样化: 每次生成的表格应具有不同的背景颜色。
  3. 点击次数限制: 当点击次数达到预设阈值(例如第四次点击)时,停止生成新的表格,并对特定次数(如第四个)生成的表格应用特定颜色。
  4. 移除功能: 允许用户点击按钮移除已生成的表格。

3. 实现步骤与代码示例

我们将分步构建解决方案,并提供完整的代码示例。

立即学习“Java免费学习笔记(深入)”;

Doc To HTML
Doc To HTML

使用 MinerU 文档处理引擎将 Word 文档(.doc、.docx)转换为保留结构和格式的干净 HTML。

下载

3.1 HTML结构准备

首先,我们需要一个容器来承载动态生成的表格,以及一个触发生成操作的按钮。同时,为了演示移除功能,每个生成的表格内部会包含一个移除按钮。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动态表格生成与颜色控制</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 20px;
        }
        #second {
            margin-bottom: 20px;
            background-color: #e0e0e0;
            padding: 15px;
            border-radius: 8px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
        #second label, #second input, #second button {
            margin-right: 10px;
        }
        #dynamic-forms {
            width: 80%;
            max-width: 800px;
            margin-top: 20px;
        }
        .appended-form {
            margin-bottom: 15px;
            margin-top: 15px;
            border: 1px solid #ccc;
            border-radius: 5px;
            padding: 10px;
            position: relative;
        }
        .appended-form table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 10px;
        }
        .appended-form table td {
            padding: 8px;
            border: 1px solid #ddd;
        }
        .remove-table-btn {
            float: right;
            margin-right: 10px;
            background-color: #dc3545;
            color: white;
            border: none;
            padding: 5px 10px;
            border-radius: 4px;
            cursor: pointer;
        }
        .remove-table-btn:hover {
            background-color: #c82333;
        }
    </style>
</head>
<body>
    <div id="second">
        <label for="pan">Location:</label>
        <input type="text" id="pan" name="pan">
        <button type="button" id="formButton">+</button> <!-- 点击此按钮生成表格 -->
    </div>

    <div id="dynamic-forms">
        <!-- 动态生成的表格将添加到这里 -->
    </div>
</body>
</html>

3.2 JavaScript/jQuery逻辑实现

接下来,我们将编写JavaScript代码来处理按钮点击事件、生成随机颜色、控制表格数量以及实现移除功能。

<script>
    // 全局变量用于追踪表格生成次数
    let clickCount = 0;
    // 定义最大允许生成的表格数量
    const MAX_TABLE_APPENDS = 4; // 允许生成4个表格,第5次点击将不再生成

    /**
     * 生成一个随机的RGB颜色字符串。
     * @returns {string} 例如 "rgb(255, 123, 0)"
     */
    function getRandomColor() {
        const r = Math.floor(Math.random() * 256);
        const g = Math.floor(Math.random() * 256);
        const b = Math.floor(Math.random() * 256);
        return `rgb(${r}, ${g}, ${b})`;
    }

    $(document).ready(function () {
        // 1. 处理“生成表格”按钮点击事件
        $("#formButton").click(function () {
            // 检查是否已达到最大生成数量
            if (clickCount >= MAX_TABLE_APPENDS) {
                alert(`已达到最大表格生成数量 (${MAX_TABLE_APPENDS})!`);
                return; // 停止执行,不再生成表格
            }

            clickCount++; // 增加计数器

            // 根据点击次数决定表格颜色
            let tableBackgroundColor;
            if (clickCount === MAX_TABLE_APPENDS) {
                // 如果是第MAX_TABLE_APPENDS次生成(即最后一个表格),使用特定颜色
                tableBackgroundColor = "salmon"; // 例如,使用鲑鱼色
            } else {
                // 其他表格使用随机颜色
                tableBackgroundColor = getRandomColor();
            }

            // 获取输入框的值
            const locationValue = $("#pan").val();

            // 构建要追加的HTML字符串
            // 注意:为动态生成的元素分配唯一的ID或使用类名是最佳实践
            const newFormHtml = `
                <form id="form_${clickCount}" class="appended-form">
                    <button type="button" class="remove-table-btn" data-form-id="form_${clickCount}">-</button>
                    <table style="background-color: ${tableBackgroundColor};">
                        <tr>
                            <td>Location                  
                            <input type="text" value="${locationValue}">
                            </td>
                            <td>P1                  
                            <input type="text">
                            </td>
                        </tr>
                        <tr>
                            <td>P2                        
                            <input type="text">
                            </td>
                            <td>P3                    
                            <input type="text">
                            </td>
                        </tr>
                        <tr>
                            <td>Sometime                    
                            <input type="text">
                            </td>
                            <td>Full day             
                            <input type="text">
                            </td>
                        </tr>
                    </table>
                </form>
            `;

            // 将新表格追加到指定容器
            $("#dynamic-forms").append(newFormHtml);

            // 清空Location输入框
            $("#pan").val("");
        });

        // 2. 处理“移除表格”按钮点击事件(使用事件委托)
        // 由于移除按钮是动态生成的,需要使用事件委托来确保其事件监听有效
        $(document).on("click", ".remove-table-btn", function (event) {
            event.preventDefault(); // 阻止默认行为
            // 获取移除按钮所属的表单元素并移除
            $(this).closest(".appended-form").remove();
            // 注意:这里没有递减clickCount,因为移除一个表格不应影响已生成的总数限制。
            // 如果需要根据当前页面上存在的表格数量来决定是否可以继续添加,
            // 则需要更复杂的逻辑来实时计算页面上的表格数量。
        });
    });
</script>

4. 代码解析与注意事项

4.1 计数器与最大限制

  • let clickCount = 0;: 初始化一个变量来跟踪生成表格的次数。
  • const MAX_TABLE_APPENDS = 4;: 定义一个常量来设置允许生成的最大表格数量。
  • if (clickCount >= MAX_TABLE_APPENDS) { ... return; }: 在每次点击生成按钮时,首先检查 clickCount 是否已达到 MAX_TABLE_APPENDS。如果达到,则弹窗提示并立即退出函数,阻止新的表格生成。
  • clickCount++;: 每次成功生成一个表格后,递增计数器。

4.2 随机颜色生成

  • getRandomColor() 函数:
    • 利用 Math.random() 生成0到1之间的随机浮点数。
    • 乘以256并使用 Math.floor() 得到0到255之间的整数,这代表了RGB颜色分量的值。
    • 返回一个 rgb(r, g, b) 格式的字符串,可以直接作为CSS background-color 的值。

4.3 条件颜色应用

  • if (clickCount === MAX_TABLE_APPENDS) { ... } else { ... }: 在生成表格前,根据当前的 clickCount 判断是否为最后一个允许生成的表格。
    • 如果是最后一个表格 (clickCount 等于 MAX_TABLE_APPENDS),则为其分配一个特定的颜色(例如 salmon)。
    • 否则,为其分配一个随机生成的颜色。

4.4 动态HTML追加

  • const newFormHtml =...;: 使用ES6的模板字符串(反引号 `)来构建要追加的HTML。这种方式使得嵌入变量(如 tableBackgroundColor 和 locationValue)非常方便和可读。
  • $("#dynamic-forms").append(newFormHtml);: jQuery的 append() 方法用于将新的HTML内容添加到匹配元素的末尾。
  • 重要提示: 在原始代码中,所有动态生成的 <form> 都使用了 id="form1",这会导致页面上出现重复ID,违反HTML规范,并可能导致JavaScript行为异常。在修改后的代码中,我们为每个表单分配了唯一的ID,例如 id="form_${clickCount}",并添加了类名 appended-form 以便统一管理样式。

4.5 动态元素事件处理(事件委托)

  • $(document).on("click", ".remove-table-btn", function (event) { ... });: 对于动态添加到DOM中的元素,不能直接使用 $(".remove-table-btn").click() 绑定事件,因为在页面加载时这些元素并不存在。
  • 事件委托(Event Delegation) 是解决此问题的最佳实践。通过将事件监听器绑定到父元素(例如 document 或 $("#dynamic-forms")),然后指定一个选择器(.remove-table-btn),jQuery会监听父元素上的点击事件,并检查事件源是否匹配指定的选择器。
  • $(this).closest(".appended-form").remove();: this 指向被点击的 .remove-table-btn 元素。closest(".appended-form") 向上遍历DOM树,找到最近的父级 .appended-form 元素,然后 remove() 方法将其从DOM中移除。

5. 总结

通过本教程,我们学习了如何使用JavaScript和jQuery实现动态UI元素的生成、样式定制和数量控制。关键技术点包括:

  • 计数器变量:用于限制动态元素的生成数量。
  • 随机颜色函数:为动态元素提供多样化的视觉效果。
  • 条件逻辑:根据特定条件应用不同的样式或行为。
  • jQuery的 append() 方法:简化HTML内容的动态添加。
  • 事件委托:确保对动态生成的元素也能正确绑定事件监听器。

掌握这些技术,您将能够更灵活地构建交互式和动态的Web应用程序。在实际项目中,请务必注意代码的可维护性、性能优化以及遵循HTML规范,例如避免重复ID。

热门AI工具

更多
WorkBuddy

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

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

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

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

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

DeepSeek

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

豆包大模型

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

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

561

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

916

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2082

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

2088

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

453

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

297

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

506

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

249

2026.01.13

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.6万人学习

CSS教程
CSS教程

共754课时 | 93.9万人学习

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

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