
当在javascript中动态创建并添加新的html元素到dom时,例如表格行中的select下拉框,像select2这样的jquery插件不会自动对其生效。本文将详细讲解如何正确地在元素被添加到dom之后,通过调用select2()方法手动初始化这些动态元素,确保其样式和功能正常应用,并提供代码示例及常见错误修正。
在现代Web应用开发中,我们经常需要根据用户操作或数据变化动态地向页面添加内容。例如,在一个数据录入表格中,用户可能需要点击“添加”按钮来新增一行数据。如果新添加的行中包含需要特殊样式或功能的元素(如使用Select2插件美化的下拉框),开发者可能会发现这些插件并未自动作用于新元素。
这是因为大多数jQuery插件,包括Select2,在页面加载时会遍历DOM并绑定到匹配的选择器上。对于在页面加载后才通过JavaScript动态创建并添加到DOM的元素,这些插件并不知道它们的存在,因此不会自动应用其功能和样式。要解决这个问题,我们需要在元素被添加到DOM之后,手动触发插件的初始化方法。
解决Select2不作用于动态添加元素的核心原理很简单:在动态创建的<select>元素被添加到DOM树中之后,立即调用Select2的初始化方法.select2()来对其进行绑定。 这样,Select2就会识别并美化这个新元素。
以下是一个详细的示例,展示如何在点击“添加”按钮后,动态生成表格行,并在新行中的<select>元素上正确应用Select2插件。
首先,我们需要一个基本的HTML表格和一个用于添加行的按钮。
<table class="table table-striped" id="submissionTable">
<thead>
<tr>
<th>#</th>
<th>ITEM</th>
<th>QTY</th>
<th>MEASURE BY</th>
<th>UNIT PRICE</th>
<th>LINE TOTAL</th>
<th>操作</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<!-- 初始行,如果需要可以为空或包含一个示例行 -->
<tr id="tablerow0"></tr>
</tbody>
</table>
<button id="add" class="btn btn-primary mt-3">添加新行</button>接下来是关键的JavaScript部分。我们将修正原始代码中的语法错误,并确保Select2在正确的时间点被初始化。
$(function () {
let counter = 1; // 用于生成唯一ID和名称的计数器
// 示例下拉选项数据
let dropdownOptions = [
{ Value: '0', Text: '选项一' },
{ Value: '1', Text: '选项二' },
{ Value: '2', Text: '选项三' }
];
$("#add").click(function () {
// 1. 构建新行的HTML字符串
var newRowHtml =
'<tr id="tablerow' + counter + '"> ' +
'<td>' +
'<label id="CountItems' + counter + '"><strong>' + counter + '</strong></label>' +
'</td>' +
'<td width="40%">' +
// 修正:id属性的引号闭合位置和name/id的格式
'<select onchange="sendInfo(this)" class="form-select js-dropdown" data-id="' + counter + '" name="Item_Id[' + counter + ']" id="ItemId' + counter + '" required="required">' +
'</select>' +
'</td>' +
'<td width="10%">' +
'<input type="text" class="form-control" name="Qty[' + counter + ']" value="1" id="Qty' + counter + '" onchange="calQtyBase(this)" data-QtyId="' + counter + '" required="required" />' +
'</td>' +
'<td width="10%">' +
'<input type="text" class="form-control" name="MeasureBy[' + counter + ']" value="" id="MeasureBy' + counter + '" readonly />' +
'</td>' +
'<td width="20%">' +
'<input type="text" class="form-control" name="Unit_Price[' + counter + ']" value="0.00" id="UnitPrice' + counter + '" onchange="priceBase(this)" data-PriceId="' + counter + '" required="required" />' +
'</td>' +
'<td width="20%">' +
'<input type="text" class="form-control" name="Line_Total[' + counter + ']" value="0.00" id="LineTotal' + counter + '" required="required" />' +
'</td>' +以上就是jQuery Select2在动态DOM元素上的正确初始化与应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号