【问题标题】:assigning unique id and unique name to dynamically created element using global variable使用全局变量为动态创建的元素分配唯一 ID 和唯一名称
【发布时间】:2013-06-14 08:12:09
【问题描述】:

我尝试了不同的方法来为我动态创建的input 字段分配唯一名称,以便我可以在 PHP 中访问它们的值。开始知道可以在 JavaScript 中声明一个全局变量,这意味着每次我在单击按钮时调用 addRow() 函数时,变量的值不会被重新初始化,因此我可以将其用作名称或 ID,但我无法使其执行。

var count = 2;

function addRow() {

  var table=document.getElementById("studenttable");
  var row=table.insertRow(-1);

  var cell1 = row.insertCell(0);
  var cell2 = row.insertCell(1);  

  cell1.innerHTML="<td> <input type='text' **name='nametext+count'" +
    "id='nametext+count'** required  >"; 

  /* also tried..  
  cell1.innerHTML="<td> <input type='text' name='nametext"+count" '" +
    "id='nametext"+count "' required>";
  */

  cell2.innerHTML="<td><div class='dropdown dropdown-dark'>" +
    "<select name='two' class='dropdown-select' >" +
    "<option value=''>Select an option</option><div>" +
    "<option value='1'>Male</option>" +
    "<option value='2'>Female</option></div>" +
    "</option></select></div></td>";

  count++;
}

【问题讨论】:

  • 代码似乎有效:jsfiddle.net/T7ZCF
  • 没有为动态元素分配唯一的 ID 或名称。我已经尝试了所有可能的引号组合。

标签: javascript dom-manipulation


【解决方案1】:

您的代码适用于input(不适用于select),但我建议采用更清晰、更不易出错的不同方法。它以正确的方式创建节点(使用document.createElement())而不是设置innerHTML——避免转义错误、无效的HTML标签和其他常见错误 .

Click here for demo.

var count = 2;

function addRow() {

    var table = document.getElementById("studenttable");
    var row = table.insertRow(-1);

    var cell1 = row.insertCell(0);
    var cell2 = row.insertCell(1);

    var ipt = document.createElement('input');
    ipt.setAttribute("type", "text");
    ipt.name = "nametext" + count;      // setting unique NAME
    ipt.id = "nametext" + count;        // setting unique ID
    ipt.setAttribute("required", "true");

    cell1.appendChild(ipt);

    var theDiv = document.createElement('div');
    theDiv.setAttribute("class", "dropdown dropdown-dark");
    var theSelect = document.createElement('select');

    theSelect.name = "select"+count;  // setting unique NAME
    theSelect.id = "select"+count;    // setting unique ID

    theSelect.setAttribute("class", "dropdown-select");
    // option "Select an option"
    var opt0 = document.createElement('option');
    opt0.value = "";
    opt0.text = "Select an option";
    theSelect.appendChild(opt0);
    // option "Male"
    var opt1 = document.createElement('option');
    opt1.value = "1";
    opt1.text = "Male";
    theSelect.appendChild(opt1);
    // option "Female"
    var opt2 = document.createElement('option');
    opt2.value = "2";
    opt2.text = "Female";
    theSelect.appendChild(opt2); 

    theDiv.appendChild(theSelect);
    cell2.appendChild(theDiv);

    count++;
}

【讨论】:

  • k..lemme 试试这个,但是选择标签呢..!!是否可以以类似的方式为其分配一个唯一的 ID..?
  • 已更新。希望对您有所帮助。
【解决方案2】:

变化:

cell1.innerHTML="<td> <input type='text' name='nametext+count' id='nametext+count' required  >"; 

收件人:

cell1.innerHTML="<td> <input type='text' name='" + nametext+count + "' id='" + nametext+count + "' required  >";

字符串文字不会在 JavaScript 中解释。

【讨论】:

  • 也许提问者试图加粗该部分?这些按钮确实使它看起来成为可能。
  • 我曾经从已经提出的问题中获益。在这个网站上提出问题的新手。 ** 当我尝试加粗内容时自动添加..!
  • :/ @Frits van Campen 用于显示新行的按钮已停止显示新创建的文本框,一旦我进行了更改..!!怎么了? &lt;a class="button black" onclick="addRow()"&gt;Add Row&lt;/a&gt;
  • change cell1.innerHTML 所以里面的东西现在都不见了。您可以随时使用+= 添加。这是你需要的吗?
  • 有点问题,先生。在进行包括此速记在内的这些更改时.. 我的按钮正在向表格行添加空白
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多