如何使计数器正确工作

How do I make my counter work correctly?

本文关键字:工作 计数器 何使      更新时间:2023-09-26

我有一个函数,当我按下按钮时会添加div。我在删除中写了一个计数器重置逻辑,它应该重新计算我所有的名字。

我的问题是,当我添加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重新计算所有属性需要时间吗?如果是,它们是否已缓存?如果是,我可以强制刷新它们吗。?

考虑简化你的生活。

<input type="text" name="blah[]" />

您可以拥有任意数量的这些元素。服务器将接收一组值,这意味着您不必手动计算它们。

据我所知,您希望在删除后更新"name"。但是,当slideUp()完成时,代码异步执行remove(),而重命名在调用slideUp()之后立即调用,在调用remove(()之前调用。

您可以通过将重命名代码放在调用remove()之后的slideUp()处理程序中来解决此问题:

 }).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);
               })
             }
         });
     }
 });