【发布时间】:2018-10-03 22:09:59
【问题描述】:
我正在尝试将输入字段和按钮附加到具有 id 的动态创建的 div。每次单击另一个按钮时,var i 会增加一,该数字会添加到我尝试将 HTMl 附加到的 id 中。
// Category
var i = 1;
$('#addcategory').click(function() {
i++;
$('#dynamic_field').append('<div class="row" id="row' + i + '"><div class="col-md-8"><ul class="categorylist"><li><input type="text" name="category[]" placeholder="' + i + '. Voeg een categorie toe" class="form-control name_list" /><div id="dynamic_questionfield' + i + '"><div class="row" id=questionrow"' + i + '"> <div class="col-md-8"> <ul class="questionlist"> <li> <input type="text" name="question[]" placeholder="1. Voeg een vraag toe" class="form-control name_list" /> </li> </ul> </div> <div class="col-md-4"> <button type="button" name="addquestion" id="addquestion' + i + '" class="btn btn-success questionbutton">Extra vraag</button> </div> </div></div></li></ul></div><div class="col-md-4"><button type="button" name="remove" id="' + i + '" class="btn btn-danger btn_remove">X</button></div></div>');
});
$(document).on('click', '.btn_remove', function() {
var button_id = $(this).attr("id");
$('#row' + button_id + '').remove();
});
// Question
var e = 1;
$(document).on("click", "#addquestion" + i + "", function() {
e++;
$('#dynamic_questionfield' + i + '').append('<div class="row" id="questionrow' + e + '"> <div class="col-md-8"> <ul class="questionlist"> <li> <input type="text" name="question[]" placeholder="' + e + '. Voeg een vraag toe" class="form-control name_list"> </li> </ul> </div><div class="col-md-4"><button type="button" name="remove" id="' + e + '" class="btn btn-danger removequestion btn_removequestion">X</button></div></div>');
});
$(document).on('click', '.btn_removequestion', function() {
var button_id = $(this).attr("id");
$('#questionrow' + button_id + '').remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="dynamic_field">
<div class="row">
<div class="col-md-8">
<ul class="categorylist">
<li>
<input type="text" name="category[]" placeholder="1. Voeg een categorie toe" class="form-control name_list" />
<div id="dynamic_questionfield1">
<div class="row">
<div class="col-md-8">
<ul class="questionlist">
<li>
<input type="text" name="question[]" placeholder="1. Voeg een vraag toe" class="form-control name_list" />
</li>
</ul>
</div>
<div class="col-md-4">
<button type="button" name="addquestion" id="addquestion1" class="btn btn-success questionbutton">Extra vraag</button>
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="col-md-4">
<button type="button" name="addcategory" id="addcategory" class="btn btn-success">Extra categorie</button>
</div>
</div>
</div>
这是我的意思的截图:
当我单击第一个显示 extra vraag 的按钮时,它应该在第一个列表中添加一个额外的输入字段,但它会将其添加到第二个列表中。
如果我添加多个列表也会发生同样的情况,它总是将新的输入字段添加到最后添加的列表项中。
这是为什么呢?
【问题讨论】:
-
这是错误的方法。
$(document).on("click","#addquestion"+i, ...不会像你想象的那样工作,它只会向i引用的元素添加一个处理程序,该元素恰好在该行运行时出现。不要将ids 与添加的数字一起使用。 jQuery 有很多可以使用的辅助函数,例如.closest()或.find()。一般的想法是添加一个通用的按钮单击处理程序,该处理程序将 HTML 树向上传递到适当的父项,然后将所需的字段添加到适当的子项。 -
@ChrisG 谢谢,有没有这方面的例子?
-
@ChrisG 太好了,谢谢。删除字段时,此代码甚至会更改数字!
标签: javascript jquery