
实现动态表单行的关键在于:
当表单元素(如下拉菜单选项)由PHP从数据库中获取时,这只影响表单的初始渲染。当JavaScript动态添加新行时,它不会再次执行PHP代码。因此,新行的HTML模板必须包含完整的、已渲染好的下拉菜单选项。如果这些选项是固定的,可以直接在JavaScript模板中硬编码;如果选项需要根据某些条件动态加载,则需要通过AJAX在添加新行时异步获取数据并填充。
我们将通过一个具体的表格示例来演示如何动态添加和删除行。
首先,我们需要一个包含表单和表格的HTML结构。表格中应有至少一行作为初始模板,并包含用于添加和删除行的按钮。为了方便识别,我们通常在按钮上添加自定义属性(如data-name='add'或data-name='del')或特定的类名。
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<div class="container mt-4">
<form>
<div class="card">
<div class="card-header">
<h3 class="card-title">设备信息</h3>
</div>
<div class="card-body">
<table id='dyntbl' class='table border text-nowrap text-md-nowrap table-striped mb-0'>
<thead>
<tr>
<th class="text-center">#</th>
<th class="text-center">设备品牌</th>
<th class="text-center">设备型号</th>
<th class="text-center">序列号</th>
<th class="text-center">设备级别</th>
<th>
<button type="button" class="btn text-success add-row-btn" data-name='add'>
<i class="fe fe-plus-circle" style="font-size:1.6em;"></i>
</button>
</th>
</tr>
</thead>
<tbody class="field_wrapper" id="table_body">
<tr>
<th scope="row">1</th>
<td>
<select class="form-control form-select brand" name="brand[]" required="">
<option value="">请选择品牌</option>
<!-- 假设这些选项由PHP生成或在此处硬编码 -->
<option value="1">品牌A</option>
<option value="2">品牌B</option>
<option value="3">品牌C</option>
</select>
</td>
<td>
<select class="form-control form-select model" name="model[]" required="">
<option value="">请选择型号</option>
<!-- 假设这些选项由PHP生成或在此处硬编码 -->
<option value="101">型号X</option>
<option value="102">型号Y</option>
<option value="103">型号Z</option>
</select>
</td>
<td><input type="text" name="serialNo[]" class="form-control serialNo"></td>
<td><input type="text" name="deviceLevel[]" class="form-control" readonly=""></td>
<td>
<button type="button" class="btn text-danger delete-row-btn" data-name="del">
<i class="fe fe-minus-circle" style="font-size:1.6em;"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form>
</div>说明:
立即学习“Java免费学习笔记(深入)”;
接下来,我们编写JavaScript代码来处理行的增删逻辑。
// 定义新行的HTML模板字符串
// 注意:下拉菜单的选项在这里是硬编码的。如果选项需要动态加载,
// 则需要通过AJAX在添加新行后进行填充,或者在后端预渲染好所有可能的选项。
const table_row_html = `
<tr>
<th scope="row">{{ROW_NO}}</th>
<td>
<select class="form-control form-select brand" name="brand[]" required="">
<option value="">请选择品牌</option>
<option value="1">品牌A</option>
<option value="2">品牌B</option>
<option value="3">品牌C</option>
</select>
</td>
<td>
<select class="form-control form-select model" name="model[]" required="">
<option value="">请选择型号</option>
<option value="101">型号X</option>
<option value="102">型号Y</option>
<option value="103">型号Z</option>
</select>
</td>
<td><input type="text" name="serialNo[]" class="form-control serialNo"></td>
<td><input type="text" name="deviceLevel[]" class="form-control" readonly=""></td>
<td>
<button type="button" class="btn text-danger delete-row-btn" data-name="del">
<i class="fe fe-minus-circle" style="font-size:1.6em;"></i>
</button>
</td>
</tr>`;
$(document).ready(function() {
// 监听添加按钮的点击事件
$(document).on("click", ".add-row-btn", function() {
const table_body = $(this).closest("table").find("tbody");
const current_row_count = table_body.children("tr").length;
// 替换模板中的行号占位符,并追加新行
table_body.append(
table_row_html.replace("{{ROW_NO}}", current_row_count + 1)
);
return false; // 阻止默认行为
});
// 监听删除按钮的点击事件
$(document).on("click", ".delete-row-btn", function() {
// 确保至少保留一行
const table_body = $(this).closest("table").find("tbody");
if (table_body.children("tr").length > 1) {
$(this).closest("tr").remove(); // 删除当前行
// 重新编号,可选操作,但有助于保持界面整洁
table_body.children("tr").each(function(index) {
$(this).find("th[scope='row']").text(index + 1);
});
} else {
alert("至少需要保留一行设备信息。");
}
return false; // 阻止默认行为
});
});代码说明:
通过上述方法,我们能够有效地在HTML表单中实现动态添加和删除行的功能。核心在于利用JavaScript/jQuery的客户端能力,通过HTML模板和事件委托机制来管理DOM。即使初始表单内容由PHP等后端语言生成,只要将完整的HTML结构(包括所有选项)作为JavaScript模板,就能实现无缝的动态交互。对于更复杂的场景,如新行中的下拉菜单选项需要实时从数据库加载,则可以结合AJAX技术来进一步增强功能。
以上就是动态表单行管理:使用JavaScript/jQuery实现高效增删操作的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号