javascript - jquery增加附加行中子级的id和名称

标签 javascript jquery

大家好。我正在向一个长而复杂的表单中的表添加一个“更多行”按钮,为了添加行,我将克隆表中的现有行,对其进行修改,然后将其附加到表的末尾。

该行包含具有按顺序编号的 id 和 name 属性的输入(例如,第一行为 id="Item_Name1"和 name="Item_Name1",第二行为 id="Item_Name2"和 name="Item_Name2", ETC。)。我正在寻找在附加行中继续此编号序列的最佳方法。

这是 jQuery:

jQuery.noConflict();

jQuery(document).ready(function($){
  var i = $("table#table-id tbody tr").length;
  $("button#more-rows").click(function() {
      var clonedRow = $("table#table-id tbody tr:first").clone();
      i++;
      $("*[name*='1']", clonedRow).attr('id', function() {
          var attrval = $(this).attr("id");
          var attrval = attrval.replace( /\d/g , "" );
          return attrval + i
          });
      $("table#table-id").append(clonedRow);
  });
});

这适用于 id,但是如何增加名称属性呢?任何有关更简单和/或更高效地编写此内容的提示也将受到赞赏。

最佳答案

这可能有帮助,也可能没有帮助,但这里是:

如果您使用的是 PHP,您可能希望尝试将它们命名为“fieldname[]”,而不是在字段名称后添加数字后缀,并且不提供 ID。所以你会有这样的标记:

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

然后,当您检查 POST 上的值时(我所做的另一个假设),PHP 将自动为该 POST 值创建一个数组,您可以像这样访问该数组:

<?php
$ItemNames = $_POST['Item_Name'];
foreach($ItemNames as $index => $value) {
   //values are ordered by the order they appeared in the DOM
   //each value in this array will be a value from an input that had name="Item_Name[]"
}
?>

或者

如果您不使用 PHP,那么您所做的事情就可以正常工作。只需对 name 执行与 id 相同的操作即可。

但是,我要注意的是,如果您允许删除行,除了根据行计数递增之外,您可能还需要确保具有给定 ID 的元素尚不存在。否则,您可能会遇到这样的情况:有两行字段的后缀为“1”和“2”,删除第一行,然后添加新行,然后您将有两行字段的后缀为“2”。

您的代码,设置了 name 属性并检查了 id:

jQuery.noConflict();

jQuery(document).ready(function($) {
    var i = $("table#table-id tbody tr").length;
    $("button#more-rows").click(function() {
        var clonedRow = $("table#table-id tbody tr:first").clone();
        i++;
        $("*[name*='1']", clonedRow).attr('id', function() {
            var attrval = $(this).attr("id");
            attrval = attrval.replace(/\d/g, "");
            while($('#' + attrval + i).size() > 0) {
                i++;
            }
            return attrval + i;
        }).attr('name', function() {
            var attrval = $(this).attr("name");
            attrval = attrval.replace(/\d/g, "");
            return attrval + i;
        });
        $("table#table-id").append(clonedRow);
    });
});

关于javascript - jquery增加附加行中子级的id和名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917984/

相关文章:

javascript - 停止移动下方内容的 jQuery 向下滑动效果?

javascript - Angular - 在页面加载时触发 $http.get

javascript - 具有多个 altField 和 altFormat 的 jQuery UI 日期选择器

javascript - 将缩略图添加到基本的 jQuery slider

javascript - 可拖动的 ID

javascript - 使用 jquery validate() 同时具有提交处理程序

jquery - 水平 Accordion 切换

javascript - 第一次演练后如何停止触发 introjs?

javascript - 打开新的空白窗口,添加输入元素,然后将单击事件分派(dispatch)给不起作用的元素

javascript - 简单的 jQuery .change 问题