2012-03-19 52 views
0

我在javascript中动态创建行。由于所有行中的控件都具有相同的ID,我需要在创建时为该控件分配一个ID。任何人都可以帮助我如何分配ID给控制 这是我的代码如何为动态创建的行分配ID

function AddNewRow(tblrowdetails) { 
    var table = $("tblrowdetails"); //getting the table id 
    var rowCount = table.rows.length; 
     var row = table.insertRow(rowCount); 

     var colCount = table.rows[0].cells.length; 

     for(var i=0; i<colCount; i++) { 

      var newcell = row.insertCell(i); 
      newcell.innerHTML = table.rows[0].cells[i].innerHTML; 

      switch(newcell.childNodes[0].type) { 
       case "text": 
         newcell.childNodes[0].value = ""; 
         break; 
       case "checkbox": 
         newcell.childNodes[0].checked = false; 
         break; 
       case "select-one": 
         newcell.childNodes[0].selectedIndex = 0; 
         break; 
     } 
    } 
    } 
}  

,我需要分配的ID给控制以及如何分配请帮我

+0

这将是有助于查看'table.rows [0] .cells [i] .innerHTML'知道什么是“控制” – 2012-03-19 10:18:01

+0

在您的case语句中,只需在设置值之前或之后指定一个新的ID:'newcell.childNodes [ 0] .id ='newId''。基于rowIndex的某种计数器应该可以完成这项工作。 – RobG 2012-03-19 10:29:59

回答

0

一种方式可能是

... 
     for(var i=0; i<colCount; i++) { 

      var newcell = row.insertCell(i); 
      newcell.innerHTML = table.rows[0].cells[i].innerHTML; 
      // assign id in the form of rX_cY - X,Y being row & column numbers 
      $(newcell.childNodes[0]).attr('id', 'r' + rowCount.ToString() + '_c' + i.ToString()); 

      switch(newcell.childNodes[0].type) { 
... 
+0

不需要'toString()','+'操作符会这样。 – RobG 2012-03-19 10:38:26

+0

感谢您的回复将尝试让你知道 – prema 2012-03-19 10:56:58

0

您可以将ID添加到每一行,以及类每个控件,因此您可以使用此查询访问给定的控件:#myRow .mycontrol。

0

假设通过'控制'你意味着你添加到表单元格的输入,我想newcell.childNodes[0].id = '[someid]'应该这样做吗?如果你想分配一个随机ID,使用类似

newcell.childNodes[0].id = 'c' + (Math.floor(Math.random()*10000)).toString(16) 
+0

感谢您的回复将尝试让我知道 – prema 2012-03-19 10:56:40

0

可以在POJS做到这一点很简单:

var table = document.getElementById('tblrowdetails'); 
var newRow = table.rows[0].cloneNode(true); 
var newCells = newRow.cells; // Use DOM cells collection 

/* 
    fix the ids and values of controls here 
    using your case statement 
*/ 

table.tBodies[0].appendChild(newRow); // Must append to a tBody to keep IE happy 
相关问题