在前端开发场景中,我们常常需要根据用户操作动态生成页面元素,同时要对生成行为做合理限制,避免无意义的重复操作。本文就来实现使用JavaScript和jQuery动态生成带随机背景色的表格,并且限制表格的创建次数,当达到上限后不再允许生成新的表格。

实现思路梳理
整个功能的实现可以分为三个核心部分:
- 随机背景色生成:通过生成随机的RGB数值,组合成合法的CSS颜色值,为表格的每一行或者每一个单元格设置不同的背景色。
- 动态表格生成:监听用户的点击操作,使用jQuery或者原生JavaScript创建表格的DOM结构,包括表头、表格行、单元格,并将表格插入到页面指定位置。
- 创建次数限制:定义一个计数器变量,每次生成表格时计数器加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://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
.container {
padding: 20px;
}
.generate-btn {
padding: 8px 16px;
background-color: #409eff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
margin-bottom: 20px;
}
.generate-btn:disabled {
background-color: #ccc;
cursor: not-allowed;
}
.table-box {
margin-top: 20px;
}
table {
border-collapse: collapse;
width: 100%;
margin-bottom: 20px;
}
th, td {
border: 1px solid #e0e0e0;
padding: 10px;
text-align: center;
}
th {
background-color: #f5f5f5;
}
</style>
</head>
<body>
<div class="container">
<button class="generate-btn" id="generateBtn">生成表格</button>
<div class="table-box" id="tableBox"></div>
</div>
</body>
</html>
核心逻辑代码实现
随机颜色生成函数
我们首先需要一个生成随机RGB颜色的函数,RGB的三个通道数值范围都是0到255,我们可以通过Math.random()方法生成随机数后取整得到:
// 生成随机RGB颜色
function getRandomColor() {
// 生成0-255之间的随机整数
const r = Math.floor(Math.random() * 256);
const g = Math.floor(Math.random() * 256);
const b = Math.floor(Math.random() * 256);
// 返回rgb格式的颜色字符串
return `rgb(${r}, ${g}, ${b})`;
}
表格生成与次数限制逻辑
接下来实现点击按钮生成表格的逻辑,同时设置最大创建次数为3次,达到次数后禁用按钮并提示用户:
$(function() {
// 最大创建次数
const MAX_CREATE_COUNT = 3;
// 当前已创建次数
let createCount = 0;
// 获取按钮和容器元素
const $generateBtn = $('#generateBtn');
const $tableBox = $('#tableBox');
// 按钮点击事件
$generateBtn.on('click', function() {
// 判断是否已经达到最大创建次数
if (createCount >= MAX_CREATE_COUNT) {
alert('已达到最大创建次数,无法继续生成表格');
return;
}
// 次数加1
createCount++;
// 如果达到最大次数,禁用按钮
if (createCount === MAX_CREATE_COUNT) {
$generateBtn.prop('disabled', true);
$generateBtn.text('已达创建上限');
}
// 创建表格元素
const $table = $('