【问题标题】:How to clone form elements with auto increamented id to all elements如何将具有自动递增 id 的表单元素克隆到所有元素
【发布时间】:2017-12-20 10:36:44
【问题描述】:

我在 .我想克隆它并在另一个中动态附加,以此类推。此外,我还需要为所有表单元素分配自动递增的 id。除了纯 javascript,我不能使用任何 jQuery 或任何其他库。

这是我的 HTML

<tr id="repeat">
    <td><input type="text" id="fieldName" /></td>
    <td>
        <select name="fieldType" id="fieldType">
            <option value="string">String</option>
        </select>
    </td>
    <td><input type="radio" id="mandatory" name="mandatory" value="true" /><input type="radio" id="mandatory" name="mandatory" value="false" /></td>
    <td>Delete Button</td>
</tr>

这是我的 JavaScript

var i = 0;

this.view.findById("start").addEventHandler("click", function () {
    var original = document.getElementById('repeat');
    var clone = original.cloneNode(true);
    original.parentNode.appendChild(clone);
})

目前我可以动态克隆&lt;tr id="repeated1"&gt;中的表单元素等等,但无法将自动递增的id分配给输入框和选择框。也无法为单选按钮动态分配自动递增名称

【问题讨论】:

  • 应该像youElement.setAttribute('id','yourIncrementId')一样使用setAttribute
  • 非常感谢。这适用于 id 增量。但是现在仍然无法增加单选按钮的“名称”。

标签: javascript html html-table


【解决方案1】:

您可以根据需要更改Id 或其他属性。

但是对于您的代码,我的解决方案是使用 querySelectorAll 来获取元素并更改它的 ID,类似于下面的代码,它已经过测试并且效果很好:

基于此HTML设计代码和JS函数:

function MakeElementsWithDifferentId() {
        for (var i = 1; i < 10; i++) {
             var original = document.getElementById('repeat');
             var clone = original.cloneNode(true);
             clone.id="repeat"+i;
             clone.querySelectorAll('[id="fieldName"]')[0].id ="fieldName"+i; 
             clone.querySelectorAll('[id="fieldType"]')[0].id ="fieldType"+i; 
             clone.querySelectorAll('[id="mandatory"]')[0].id ="mandatory"+i; 
             clone.children[2].children[0].name="mandatoryName"+i; //To change the radio name also
             original.parentNode.appendChild(clone);
        }
    }
    MakeElementsWithDifferentId();
  <table>
        <tr id="repeat">
            <td><input type="text" id="fieldName" /></td>
            <td>
                <select name="fieldType" id="fieldType">
                    <option value="string">String</option>
                </select>
            </td>
            <td><input type="radio" id="mandatory" name="mandatory" value="true" /> </td>
            <td>Delete Button</td>
        </tr>
    </table>

MakeElementsWithDifferentId() 函数生成 10 个具有不同 ID 的批处理元素。

JSFiddle Test

运行后,您可以右键单击您想要的元素并通过检查元素查看Id

注意:

而不是clone.querySelectorAll('[id="fieldName"]')[0],最好通过querySelector 获取元素,例如clone.querySelector('[id="fieldName"]')

希望能帮到你。

【讨论】:

  • 我还需要增加 。还需要为单选按钮分配递增的“名称”。
  • 只需 clone.id="repeat"+i; 更改与强制广播名称相关的 trclone.children[2].children[0].name 的 id,请参阅更新。
  • 非常感谢。你的解决方案对我有用。单选按钮只有一个问题。我的 html 是 当我尝试克隆时,一切都很好,除了第二个单选按钮没有得到它的新 ID 和新名称。
  • @Soma,对不起,我休息了 2 天,哪一个没有得到新的 idnam ,强制性的?你尝试过 JSFiddle 测试吗?
  • 非常感谢。我已经在您的解决方案的帮助下修复了。
猜你喜欢
相关资源
最近更新 更多
热门标签