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

时间:2012-12-14 11:54:57

标签: 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>

   <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”的副本添加到页面中。我需要将页面中的所有数据作为请求发送到Controller。如何编写一个脚本,在按钮上添加额外的div副本,并在每个新字段中附加一个唯一的id?

3 个答案:

答案 0 :(得分:1)

请参阅道场http://jsfiddle.net/phusick/PeQCN/

中的工作示例

普通的香草JavaScript 中的相同代码:http://jsfiddle.net/phusick/Rceua/

Dojo版本使用dojo/_base/lang::clone作为@Peter Rader提到:

// 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;
}

如何使用上述duplicate函数:

// 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");       

答案 1 :(得分:0)

我已经编写了代码来实现这一目标。

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

查看working code

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

答案 2 :(得分:0)

相关问题