如何让我的计数器正常工作?

时间:2014-09-10 15:10:44

标签: javascript jquery

我有一个按下按钮时添加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需要时间重新计算所有属性吗?如果是的话,他们是否被缓存?如果是,我可以强制刷新它们吗?

2 个答案:

答案 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);
               })
             }
         });
     }
 });