实现动态表单行的关键在于:
aScript字符串作为新表单行的HTML模板。这个模板应包含所有必要的表单元素(如输入框、下拉菜单等)以及增删按钮。当表单元素(如下拉菜单选项)由PHP从数据库中获取时,这只影响表单的初始渲染。当JavaScript动态添加新行时,它不会再次执行PHP代码。因此,新行的HTML模板必须包含完整的、已渲染好的下拉菜单选项。如果这些选项是固定的,可以直接在JavaScript模板中硬编码;如果选项需要根据某些条件动态加载,则需要通过AJAX在添加新行时异步获取数据并填充。
我们将通过一个具体的表格示例来演示如何动态添加和删除行。
首先,我们需要一个包含表单和表格的HTML结构。表格中应有至少一行作为初始模板,并包含用于添加和删除行的按钮。为了方便识别,我们通常在按钮上添加自定义属性(如data-name='add'或data-name='del')或特定的类名。
说明:
接下来,我们编写JavaScript代码来处理行的增删逻辑。
// 定义新行的HTML模板字符串
// 注意:下拉菜单的选项在这里是硬编码的。如果选项需要动态加载,
// 则需要通过AJAX在添加新行后进行填充,或者在后端预渲染好所有可能的选项。
const table_row_html = `
{{ROW_NO}}
`;
$(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技术来进一步增强功能。