我正在创建一个动态表单,允许用户添加/删除文本字段。虽然我可以毫无问题地添加文本字段,但我在删除特定文本字段时遇到了困难。
每当我添加其他文本字段(总共5个)时,尝试删除除第一个之外的任何文本字段(例如删除字段3)。所有这些都消失了,好像页面重新加载一样。它好像我的jQuery代码在"删除字段"被按下了。
<form>
...
<div id="answers">
<div class="form-group" id="option1">
<div class="col-xs-11 col-sm-9 col-md-6">
<input class="form-control" id="answer" placeholder="Answer option">
</div>
<div class="col-xs-1 col-sm-1 col-md-1" style="line-height:36px;">
<a href="" class="remove">Remove Field</span></a>
</div>
</div>
</div>
...
</form>
<div>
<a href="" id="add">Add another field</a>
</div>
的jQuery
<script>
$(document).ready(function() {
$( "#add" ).on( "click", function(event) {
event.preventDefault();
var options = $('#answers .form-group').length + 1;
$( "#answers div:first" ).clone()
.attr('id', 'option' + options)
.appendTo( "#answers" );
});
$( ".remove" ).on( "click", function(event) {
event.preventDefault();
$(this).closest(".form-group").remove();
});
});
</script>
答案 0 :(得分:3)
而不是:
$( ".remove" ).on( "click", function(event) {
试试这个:
$(document).on("click", ".remove", function(event) {
答案 1 :(得分:0)
试试这个:
$( "body" ).on( "click", ".remove", function(event) {
event.preventDefault();
$(this).closest(".form-group").remove();
});
基本上你可以放置类remove
的任何父级(不是动态生成的)而不是body
。
答案 2 :(得分:0)
有了这个:
$(document).ready(function() {
$( ".remove" ).on( "click", function(event) {
event.preventDefault();
$(this).closest(".form-group").remove();
});
}
您正在加载时将侦听器绑定到页面上“remove”项目上的click事件。
在此时间之后添加的所有其他项目都将没有任何绑定的侦听器。
您应该使用3参数监听器
来使用事件delegation$(document).ready(function() {
$( "form" ).on( "click", ".remove" ,function(event) {
event.preventDefault();
$(this).closest(".form-group").remove();
});
}
此声明的语义包括在完整表单上绑定事件(在加载时存在),但事件将propagate发送到单击的.remove锚点。
如果您使用的是早于1.7的jquery版本,请使用delegate
javascript中事件的propagation或冒泡允许此行为。