Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript动态添加重复(唯一ID)表单Div元素_Java_Javascript_Spring_Jsp_Dojo - Fatal编程技术网

使用javascript动态添加重复(唯一ID)表单Div元素

使用javascript动态添加重复(唯一ID)表单Div元素,java,javascript,spring,jsp,dojo,Java,Javascript,Spring,Jsp,Dojo,我有一个表单,其中包含如下字段: <div class="row"> <div class="field"> <input class="" type="text" name="college" id="college"/> </div> <div class="field"> <input class="" type="text" name="city" id="city"/>

我有一个表单,其中包含如下字段:

<div class="row">
   <div class="field">
      <input class="" type="text" name="college" id="college"/>
   </div>

   <div class="field">
      <input class="" type="text" name="city" id="city"/>
   </div>

   <div class="field">
      <input class="" type="text" name="zip" id="zip"/>
   </div>
</div>
<input type="button" class="buttonWidth" id="btnAddressAdd" value="Add Worksite Addressess"/>


我有一个添加额外地址按钮,可以将div“row”的另一个副本添加到页面中。我需要将页面中的所有数据作为请求发送给控制器。如何编写一个脚本,在单击按钮时添加一个额外的div copy,并向每个新字段追加一个唯一的id

我已经编写了代码来实现这一点

逻辑:
1) 获取所需父级的innerHTML
2) 替换文本中的id
3) 插入新的html

请原谅我在JS部分的糟糕的编码风格。我不习惯直接在DOM上编码。我更喜欢JQuery

试试看

要使用此snipplet(请参见用法)

请参见Dojo中的工作示例:

普通JavaScript中使用相同的代码:

Dojo版本采用了@Peter Rader提到的
Dojo/_base/lang::clone

// var lang    = require("dojo/_base/lang");
// var array   = require("dojo/_base/array");
// var query   = require("dojo/query");
// var domAttr = require("dojo/dom-attr");

var counter = 0;

function duplicate(/*Node*/sourceNode, /*Array*/attributesToBump) {
    counter++;
    var out = lang.clone(sourceNode);
    if (domAttr.has(out, "id")) { out.id = bump(out.id); }

    query("*", out).forEach(function(node) {
        array.forEach(attributesToBump, function(attribute) {
            if (domAttr.has(node, attribute)) {
                domAttr.set(node, attribute, bump(domAttr.get(node, attribute)));
            }        
        })
    });

    function bump(/*String*/str) {
        return str + "_" + counter;
    }

    return out;
}
如何使用上述
复制
功能:

// var dom          = require("dojo/dom");
// var domConstruct = require("dojo/dom-construct");

var sourceNode = dom.byId("fieldset");
var node = duplicate(sourceNode, ["id", "name", "placeholder"]);  
domConstruct.place(node, sourceNode, "after");       

您是否使用jQuery或Prototype之类的javascript框架?我正在研究一个代码库,它使用纯javascript和DOJO作为其内置函数。我必须坚持这些编码实践本身(重新标记为dojo,这些怪物会帮你很大的忙。