通过jQuery动态添加表单元素
我已经成功地设置了表单并使其正常工作。然而,我有两个问题: a) “删除”按钮不起作用(它将删除表单元素的最后一行) b) 这是一个很小的标记问题,当按“add”添加新行表单元素时,它不是创建新的通过jQuery动态添加表单元素,jquery,Jquery,我已经成功地设置了表单并使其正常工作。然而,我有两个问题: a) “删除”按钮不起作用(它将删除表单元素的最后一行) b) 这是一个很小的标记问题,当按“add”添加新行表单元素时,它不是创建新的而是加载到现有行 这是演示链接 下面是我的JS代码 $(document).ready(function() { $('#btnAdd').click(function() { var num = $('.clonedSection').length; var newNum = new
而是加载到现有行
这是演示链接
下面是我的JS代码
$(document).ready(function() {
$('#btnAdd').click(function() {
var num = $('.clonedSection').length;
var newNum = new Number(num + 1);
var newSection = $('#pq_entry_' + num).clone().attr('id', 'pq_entry_' + newNum);
newSection.children(':first').children(':first').attr('id', 'year_' + newNum).attr('name', 'year_' + newNum);
newSection.children(':nth-child(2)').children(':first').attr('id', 'qualification_' + newNum).attr('name', 'qualification_' + newNum);
newSection.children(':nth-child(2)').children(':first').attr('id', 'university_' + newNum).attr('name', 'university_' + newNum);
$('.clonedSection').last().append(newSection)
$('#btnDel').attr('disabled', '');
if (newNum == 5) $('#btnAdd').attr('disabled', 'disabled');
});
$('#btnDel').click(function() {
var num = $('.clonedSection').length; // how many "duplicatable" input fields we currently have
$('#pq_entry_' + num).remove(); // remove the last element
// enable the "add" button
$('#btnAdd').attr('disabled', '');
// if only one element remains, disable the "remove" button
if (num - 1 == 1) $('#btnDel').attr('disabled', 'disabled');
});
$('#btnDel').attr('disabled', 'disabled');
});
更改:
$('#btnDel').attr('disabled', '');
致:
“disabled”是一个属性而不是属性。此外,请更改任何其他实例
见:
要解决插入问题,请执行以下操作:
newSection.insertAfter('#pq_entry_' + num).last();
为什么不使用这样的解决方案呢 它是一个mvvmjavascript库,易于使用和理解。
更多信息。为了解决您的第一个问题,我创建了一个
del()
函数,该函数将计算剩余的“行”数,如果只有一行,将禁用#btnDel
,反之,如果有多行,则启用它
然后,我,嗯,也改变了一切
var containerClass = '.clonedSection',
containerElem = $(containerClass),
a = $('#btnAdd'),
d = $('#btnDel');
function numRows(elem) {
return elem.length;
}
function del() {
var r = numRows($(containerClass));
if (r>1){
d.prop('disabled',false);
}
else {
d.prop('disabled',true);
}
}
del();
a.click(
function() {
var rows = numRows($(containerClass)),
lastRow = rows + 1,
newRow = containerElem
.first()
.clone(true, true)
.insertAfter($(containerClass).last());
newRow
.attr('id',function(i,v){
return v.replace(/\d/,'')+lastRow;
})
.find('input').each(
function() {
var that = this;
that.id = that.id.replace(/\d/, '') + lastRow;
that.name = that.name.replace(/\d/, '') + lastRow;
});
del();
});
d.click(
function(){
$(containerClass)
.last()
.remove();
del();
});
将新行添加到现有ul
时遇到的问题是,您查找了.clonedSection
元素的最后一个,然后将新行附加到该元素,而不是使用insertAfter()
我认为上面的修订做了你需要的,希望足够清楚,可以遵循
参考资料:
var containerClass = '.clonedSection',
containerElem = $(containerClass),
a = $('#btnAdd'),
d = $('#btnDel');
function numRows(elem) {
return elem.length;
}
function del() {
var r = numRows($(containerClass));
if (r>1){
d.prop('disabled',false);
}
else {
d.prop('disabled',true);
}
}
del();
a.click(
function() {
var rows = numRows($(containerClass)),
lastRow = rows + 1,
newRow = containerElem
.first()
.clone(true, true)
.insertAfter($(containerClass).last());
newRow
.attr('id',function(i,v){
return v.replace(/\d/,'')+lastRow;
})
.find('input').each(
function() {
var that = this;
that.id = that.id.replace(/\d/, '') + lastRow;
that.name = that.name.replace(/\d/, '') + lastRow;
});
del();
});
d.click(
function(){
$(containerClass)
.last()
.remove();
del();
});