【发布时间】:2020-10-16 20:06:54
【问题描述】:
我有一个克隆“选择器”的 jquery 代码,其中它是许多其他元素的父级。
EDIT:我添加了调用“cloneMore”的函数。它应该在用户单击行内的按钮并在其下方创建另一行时调用。
EDIT 2:我添加了<tr> 所属的表。我试图在没有<tr> <td> 标签的情况下运行它,并且该功能有效!但遗憾的是它从 html 表中删除了它。为什么会这样?
jquery sn-p
$(document).on('click', '.add-form-row', function(e){
alert("Button Click!");
e.preventDefault();
cloneMore('.form-row.spacer:last', 'form');
return false;
function cloneMore(selector, prefix) {
var newElement = $(selector).clone(true);
newElement.find('input[type=text]').each(function() { //loops through the textfields
console.log("print1");
});
newElement.each(function () {
console.log("print2");
});
html代码
<div class="display_table">
<table class="table table-hover table-striped">
<thead class="thead-dark">
<tr class="tablerow">
<th scope="col">Item</th>
<th scope="col">Item Description</th>
<th scope="col">Quantity</th>
<th scope="col">Delete</th>
</tr>
</thead>
<tbody>
{{ formset.management_form }}
{% for form in formset %}
<div class="row form-row spacer">
<tr scope="row">
<div class="input-group">
<td><input type="text" name="form-0-item" class="form-control" id="id_form-0-item" value="" readonly="readonly"></td>
<td><input type="text" name="form-0-description" class="form-control" id="id_form-0-description" value="" readonly="readonly"></td>
<td><input type="text" name="form-0-quantity" class="form-control" id="id_form-0-quantity" value="" readonly="readonly"></td>
<div class="input-group-append"><td><button class="btn btn-success add-form-row">+</button></td></div>
</div>
</tr>
</div>
{% endfor %}
</tbody>
</table>
</div>
但是,它甚至一次都没有通过循环,而且我在控制台中也没有得到“打印”。我确定父项中有一个文本字段。在这种情况下,它的 div 具有类“行形式-行间隔”
我的语法有问题吗?我在某处看到他们通过选择器获取父级,但在我的情况下,我将它放在一个变量中。有什么问题或解决方法吗?
【问题讨论】:
-
你是如何调用函数的,如果你执行 cloneMore('.input-group') 或 cloneMore('.form-row.spacer') 它将遍历该 html 内的输入-元素。
-
请添加一个sn-p(编辑并单击
[<>]),请参阅minimal reproducible example。您的问题提到“在父循环内”,但只有一个循环。您的代码显示cloneMore但似乎没有被调用。这是一个小提琴(但您应该在问题中提供一个 sn-p),它显示 您的代码可以正常工作 按照呈现方式:jsfiddle.net/tqLywmh9 -
"在这种情况下,它的 div 类为“row form-row spacer” - 这让我怀疑您正在调用
cloneMore(".row .form-row .spacer")而不是cloneMore(".row.form-row.spacer")@ 987654323@ -
aahh 对不起,我忘了包含调用它的函数!!
-
我尝试运行它并添加了
cloneMore('.form-row.spacer:last', 'form');,并有一个单独的each() 循环newElement.each(function () { console.log(this); });,它只经过一次并打印<div class="row form-row spacer"></div>,其中没有元素。我希望它打印 4 次,因为它里面有 4 个元素。怎么了?
标签: html jquery foreach jquery-selectors