JavaScript:动态更改名称属性

3

我正在编写一个脚本,它没有任何错误,但是我想添加一些函数,比如当我点击按钮时,添加输入文本的名称属性也会被更改。

这是我的脚本:

javascript:

var a = 1;
function add() {

    var fContent = document.getElementById('1');
    var sContent = document.getElementById('2');
    if (a <= 10) {
        a++;
        var objTo = document.getElementById('m');
        var divtest = document.createElement("div");
        divtest.innerHTML = (sContent.innerHTML + a + fContent.innerHTML);
        alert(divtest.innerHTML); 
        objTo.appendChild(divtest);
    }
}

html:

<input type="button" onclick="add();" value="+" />
<div id="m">
<div id="1">
<input type="text" name="f">
<input type="text" name="l">
<input type="text" name="m">
</div>
<div id="2"></div>
</div>

输出:

2
<input type="text" name="f">
<input type="text" name="l">
<input type="text" name="m">

期望输出:
2
<input type="text" name="f2">
<input type="text" name="l2">
<input type="text" name="m2">

and so on...


1
使用name="f[]"怎么样?这会创建一个值数组。 - user2182349
innerHTML 是字符串,因此您可以使用正则表达式并替换 name 属性的值。同时,您的 sContent.innerHTML 现在总是为空。 - Grundy
1
我不明白。你具体是在哪里尝试更改“name”属性?为什么你期望他们会有所不同? - basilikum
为什么不使用jQuery呢?这样会更容易。我可以为您提供jQuery解决方案。 - william.eyidi
@Grundy,sContent始终为空,因为脚本将复制fContent并将其放置到sContent中。 - Lutianna
显示剩余6条评论
1个回答

3

您没有更改名称属性的任何操作。试图通过HTML串联来进行更改可能会带来麻烦。以下是可供您参考的起始点:

(function() {

  var a = 1;

  // get a reference to the container
  var container = document.getElementById("m");
  // get a reference to the first row of input
  var base = container.children[0];  
  
  document.querySelector("button").addEventListener("click", function(e) {

    if(++a > 10) return;
    
    // clone the first row of input
    var clone = base.cloneNode(1);
    
    // change the number text by setting the span's textContent
    clone.children[0].textContent = a;
    // set the names of the input fields
    clone.children[1].name = "f" + a;
    clone.children[2].name = "l" + a;
    clone.children[3].name = "m" + a;
    
    // add the new row to the container
    container.appendChild(clone);
    
    console.log(clone);

  });

})();
<button type="button">+</button>
<div id="m">
  <div><span>1</span><input type="text" name="f1"><input type="text" name="l1"><input type="text" name="m1"></div>
</div>

如果您更愿意从头开始创建元素...

(function() {

  var a = 1;

  // get a reference to the container
  var container = document.getElementById("m");    
  var input;
  var span;
  var div;
  
  document.querySelector("button").addEventListener("click", function(e) {

    if(++a > 10) return;
    
    // create our div
    div = document.createElement("div");
    
    // create and append our span
    span = document.createElement("span");
    span.textContent = a;
    div.appendChild(span);
    
    // create and append inputs    
    ["f","l","m"].forEach(function(n){
       input = document.createElement("input");
       input.name = n + a;
       div.appendChild(input);            
    });
                
    // append our div
    container.appendChild(div);
    
    console.log(div);

  });

})();
<button type="button">+</button>
<div id="m">
  <div><span>1</span><input type="text" name="f1"><input type="text" name="l1"><input type="text" name="m1"></div>
</div>


不使用克隆,这是否可能? - Lutianna
@Myel 确定,从头开始创建元素。我已经添加了一个例子。 - canon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接