我有一个按下按钮时添加div的功能。 我在删除时写了一个计数器重新设置逻辑,它应该重新计算我的所有名字。
我的问题是,当我添加说3项并删除第2项时,我的第3项不会重命名。
我做错了什么?
$(function () {
var rowItem = $(".row", $(".formitems")); //select all rows from class formitems
$(".formitems").on("click", ".addRow", function () {
var newItem = rowItem.clone(),
rowIndex = $(".row", $(".formitems")).length;
$(":input", newItem).each(function (c, obj) {
$(obj).attr("name", $(obj).attr("crap") + rowIndex);
});
$(".formitems").append(newItem); // adds At the end of the container
}).on("click", ".removeRow", function () {
if ($(".row", $(".formitems")).length > 1) {
var target = $(this).parent().parent().parent().parent(".row");
target.slideUp(function () {
target.remove();
});
}
for (i = 0; i < $(".row", $(".formitems")).length; i++) //select our div called //formitems and then count rows in it
{
rowobj = $(".row", $(".formitems"))[i];
$(":input", rowobj).each(function (c, obj) {
$(obj).attr("name", $(obj).attr("crap") + i);
})
}
});
});
编辑:好的,所以我在使用remove()之前和之后发出警报。 jquery需要时间重新计算所有属性吗?如果是的话,他们是否被缓存?如果是,我可以强制刷新它们吗?
答案 0 :(得分:1)
考虑简化你的生活。
<input type="text" name="blah[]" />
您可以根据需要添加这些元素。服务器将接收一组值,这意味着您不必手动计算它们。
答案 1 :(得分:0)
据我所知,你想在删除后更新'名称'。但是当slideUp()完成时,代码会异步执行remove(),而在调用 remove()之前调用slideUp(),之后立即调用重命名。
你可以通过在slideUp()处理程序中调用remove()之后放置重命名代码来解决这个问题:
}).on("click", ".removeRow", function () {
if ($(".row", $(".formitems")).length > 1) {
var target = $(this).parent().parent().parent().parent(".row");
target.slideUp(function () {
target.remove();
// rename now!
for (i = 0; i < $(".row", $(".formitems")).length; i++) {
rowobj = $(".row", $(".formitems"))[i];
$(":input", rowobj).each(function (c, obj) {
$(obj).attr("name", $(obj).attr("crap") + i);
})
}
});
}
});