javascript - 复制和区分表格的部分

标签 javascript html

更新: 使用 colecmc 提供的代码(谢谢!!)我更新了代码笔。我喜欢 date.now 的添加方式,但我只想逐步增加。我不确定如何将其应用于此函数我尝试了 zer00ne 的索引增量,但我做错了。

let cloneList = [],
    index = 0; // index must be declared apart from function or else you will set it to the initial value every time the function is called.

document.getElementById('launch').onclick = function(event) {
  event.preventDefault();

  var addOnDiv = document.getElementById('addon');
  var container = document.getElementById('add-components')
  var clonedNode = addOnDiv.cloneNode(true);
  var component = clonedNode.querySelector('input');
  index++;
  clonedNode.id = index+1;

  cloneList.push(clonedNode.id);

  component.id = `componentID_${clonedNode.id}`;
  component.name = `componentName_${clonedNode.id}`;

  container.appendChild(clonedNode);
}

我的表格有问题。最初我在页面上有两种形式。然而,在提交时,只写了第一个表格中的信息。我尝试组合表格。现在,如果我填写事件和组件输入并将其写入正确的表格(很好!)。但是组件部分应该被复制。一个事件可以包含用户想要的任意多个组件。我正在使用 cloneNode,在合并表格之前,它添加了更多组件部分。现在它们组合在一起,该功能不再起作用。如果这对我所做的事情来说是正确的方法,我感到很困惑。我包括了一个 copdpen,它显示了我正在尝试做的事情的精简版本。

基本上我希望能够按添加组件,添加尽可能多的新组件,然后将它们全部作为记录写入数据库。我需要一种方法来区分所有克隆(新 ID 或名称?) 代码笔:https://codepen.io/anon_guy/pen/VMZWWW?editors=1010

HTML:

<div class="panel panel-default">
  <div class="panel-heading">
  </div>
  <div class="panel-body">
    <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-event" class="form-horizontal">
      <div class="col-sm-4">
        <label>name</label>
        <input type="text" name="name" value="name" placeholder="name" id="name" class="form-control" />
      </div>
      <div class="col-sm-4">
        <label>address</label>
        <input type="text" name="address" value="address" placeholder="address" id="address" class="form-control" />
      </div>
      <div class="col-sm-4">
        <label>phone</label>
        <input type="text" name="phone" value="phone" placeholder="phone" id="phone" class="form-control" />
        <div class="text-danger"></div>
      </div>

  </div>
  <div class="row">
  <div class="add_component">
    <button id='launch'>Add Component</button>
  </div>
  </div>
</div>
<div class="wrapper" id="add-components">
  <div class="panel panel-default " id="addon">
    <div class="panel-heading">
    </div>
    <div class="panel-body">

        <div class="col-sm-6">
          <label>component</label>
          <input type="text" name="component" value="component" placeholder="component" id="component" class="form-control" />
        </div>

      </form>
    </div>
  </div>
</div>

JS:

document.getElementById('launch').onclick = function() {
      var addOnDiv = document.getElementById('addon');
  var container = document.getElementById('add-components')
      var clonedNode = addOnDiv.cloneNode(true);
        container.appendChild(clonedNode );
    }

最佳答案

在附加到容器 clonedNode.id = Date.now();

之前,你会想尝试这样的事情

这将提供一种通过提供唯一 ID 来区分所有克隆的方法。您可以像这样更进一步:

let cloneList = [];
document.getElementById('launch').onclick = function(event) {
  event.preventDefault();

  var addOnDiv = document.getElementById('addon');
  var container = document.getElementById('add-components')
  var clonedNode = addOnDiv.cloneNode(true);
  var component = clonedNode.querySelector('input');

  clonedNode.id = Date.now();
 
  cloneList.push(clonedNode.id);

  component.id = `componentID_${clonedNode.id}`;
  component.name = `componentName_${clonedNode.id}`;

  container.appendChild(clonedNode);
}
<div class="panel panel-default">
  <div class="panel-heading">
  </div>
  <div class="panel-body">
    <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-event" class="form-horizontal">
      <div class="col-sm-4">
        <label>name</label>
        <input type="text" name="name" value="name" placeholder="name" id="name" class="form-control" />
      </div>
      <div class="col-sm-4">
        <label>address</label>
        <input type="text" name="address" value="address" placeholder="address" id="address" class="form-control" />
      </div>
      <div class="col-sm-4">
        <label>phone</label>
        <input type="text" name="phone" value="phone" placeholder="phone" id="phone" class="form-control" />
        <div class="text-danger"></div>
      </div>

  </div>
  <div class="row">
  <div class="add_component">
    <button id='launch'>Add Component</button>
  </div>
  </div>
</div>
<div class="wrapper" id="add-components">
  <div class="panel panel-default " id="addon">
    <div class="panel-heading">
    </div>
    <div class="panel-body">

        <div class="col-sm-6">
          <label>component</label>
          <input type="text" name="component" value="component" placeholder="component" id="component" class="form-control" />
        </div>

      </form>
    </div>
  </div>
</div>

关于javascript - 复制和区分表格的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46674118/

相关文章:

javascript - 声明对象的 JSON 数组并动态添加项目

html - 元素无意中随着内容的变化而移动

javascript - 你能为 Promises 定义一个 resolve 函数吗?

javascript - 无法使用 Firefox 从 navigator.mediaDevices.getUserMedia 获取两个音频流

html - 使文本显示在图像 HTML 和 CSS 之上

javascript - GWT - 允许鼠标事件在两个叠加的 Canvas 之间传播

php - CSS 数据徽章,值未出现在数据库中

javascript - 如何将js文件中的变量写入html中

javascript - 如何将未选择的值从一个下拉列表填充到表中的另一个下拉列表?

javascript - 使用 go 处理文件上传