我正在尝试学习使用jQuery动态生成html。我一直在研究以下分叉代码。
http://jsfiddle.net/plusxultra/4r22b/5/
$(function () {
var myDiv = $('#p_scents');
var i = $('#p_scents p').size() + 1;
$('#addScnt').live('click', function () {
$('<label for="p_scents"><input type="text" id="c_name" size="20" name="c_name_' + i + '" value="" placeholder="c_name" /><input type="text" id="c_acc" size="20" name="c_acc_' + i + '" value="" placeholder="c_acc" /><input type="text" id="c_desc" size="20" name="c_desc_' + i + '" value="" placeholder="c_desc" /></label><a href="#" id="removeButton">Remove</a><br>').appendTo(myDiv);
i++;
return false;
});
$('#removeButton').live('click', function () {
if (i > 2) {
$(this).parents('p').remove();
i--;
}
return false;
});
});
我能够动态创建其他输入,这符合我的目的,但由于某种原因,删除功能不起作用。我确信我做错了什么,我试图调试一段时间没有用,但没有用。有人能够解决这个问题吗?
P.S。使用jquery-1.6.4.min.js
答案 0 :(得分:2)
问题是您没有添加<p>
元素。
只需使用
$('<p><label for="p_scents"><input type="text" id="c_name" size="20" name="c_name_' + i + '" value="" placeholder="c_name" /><input type="text" id="c_acc" size="20" name="c_acc_' + i + '" value="" placeholder="c_acc" /><input type="text" id="c_desc" size="20" name="c_desc_' + i + '" value="" placeholder="c_desc" /></label><a href="#" id="removeButton">Remove</a></p>').appendTo(myDiv);
请注意开头的<p>
和结尾的</p>
。
Offtopic:你为什么要用这些标签?应使用标签将某些内容与输入相关联,但您使用它们将某些输入与div相关联。
答案 1 :(得分:0)
$(this)指的是按钮,我认为这不是你的目标。
答案 2 :(得分:0)
以下是另一种方法:
<强>代码强>
$(function () {
var myDiv = $('#p_scents');
var i = $('#p_scents p').size() + 1;
//here you will have html which will be added every time the add button is clicked
//place it inside the div so it will be easier to find which input to remove
var newInput='<div>'+myDiv.html()+ '<a href="#" id="removeButton">Remove</a>'+'</div>';
$('#addScnt').on('click', function () {
$(newInput).appendTo(myDiv);
i++;
return false;
});
$('#removeButton').on('click', function () {
//removing only the closest div
$(this).closest('div').remove();
return false;
});
});
答案 3 :(得分:0)
这是演示小提琴http://jsfiddle.net/4r22b/9/
将链接的id属性更改为class,因为id应该是唯一的,并且还会放置您要查找的<p>
。
<a href="#" class="removeButton">Remove</a>
$('.removeButton').live('click', function () {
$(this).parents('p').remove();
return false;
});
答案 4 :(得分:0)
您的原始代码存在一些问题。最值得注意的是,您没有增加导致问题的id
属性,因为这些属性应该是唯一的。如果递增id
属性,则需要更改实时语句。最后删除无效,因为你缺少appendTo函数中的
标签。这是工作和更新的小提琴。