2017-09-08 7 views
2

親テーブルと子テーブルがネストされています。両方のテーブルは、必要に応じてボタンクリック時に行を追加できます。問題は私が直面しているのは、行が親テーブルに追加され、その行の子テーブルのボタンが機能しないときです。親テーブルの最初の行の子テーブルに対して正常に動作し、2番目の行には機能しません。デモのためにスニペットをご覧ください。ボタンの新しい追加された行が2番目の行で機能していません

function addRow(tableID) { 
 

 
     var table = document.getElementById(tableID); 
 

 
     var rowCount = table.rows.length; 
 
     var row = table.insertRow(rowCount); 
 

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

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

 
     var newcell = row.insertCell(i); 
 

 
     newcell.innerHTML = table.rows[1].cells[i].innerHTML; 
 
     //alert(newcell.childNodes); 
 
     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; 
 
     } 
 
     } 
 
    } 
 

 
    function deleteRow(tableID) { 
 
     try { 
 
     var table = document.getElementById(tableID); 
 
     var rowCount = table.rows.length; 
 

 
     for(var i=0; i<rowCount; i++) { 
 
     var row = table.rows[i]; 
 
     var chkbox = row.cells[0].childNodes[0]; 
 
     if(null != chkbox && true == chkbox.checked) { 
 
      if(rowCount <= 1) { 
 
      alert("Cannot delete all the rows."); 
 
      break; 
 
      } 
 
      table.deleteRow(i); 
 
      rowCount--; 
 
      i--; 
 
     } 
 

 

 
     } 
 
     }catch(e) { 
 
     alert(e); 
 
     } 
 
    } 
 
    
 
    function addRow1(tableID) { 
 

 
     var table = document.getElementById(tableID); 
 

 
     var rowCount = table.rows.length; 
 
     var row = table.insertRow(rowCount); 
 

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

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

 
     var newcell = row.insertCell(i); 
 

 
     newcell.innerHTML = table.rows[1].cells[i].innerHTML; 
 
     //alert(newcell.childNodes); 
 
     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; 
 
     } 
 
     } 
 
    } 
 

 
    function deleteRow1(tableID) { 
 
     try { 
 
     var table = document.getElementById(tableID); 
 
     var rowCount = table.rows.length; 
 

 
     for(var i=0; i<rowCount; i++) { 
 
     var row = table.rows[i]; 
 
     var chkbox = row.cells[0].childNodes[0]; 
 
     if(null != chkbox && true == chkbox.checked) { 
 
      if(rowCount <= 1) { 
 
      alert("Cannot delete all the rows."); 
 
      break; 
 
      } 
 
      table.deleteRow(i); 
 
      rowCount--; 
 
      i--; 
 
     } 
 

 

 
     } 
 
     }catch(e) { 
 
     alert(e); 
 
     } 
 
    }
table { 
 
    border-collapse: collapse; 
 
    width: 100%; 
 
    border:1px solid #1E90FF; 
 
} 
 

 
th, td { 
 
    text-align: left; 
 
    padding: 8px; 
 
    border:1px solid #1E90FF; 
 

 
} 
 

 

 

 
th { 
 
    background-color: #1E90FF; 
 
    color: white; 
 
}
<TABLE id="dataTable"> 
 
        <thead> 
 
        <tr> 
 
        <th style="text-align: center;">&nbsp;Select&nbsp;</th>  
 
        <th style="text-align: center;">&nbsp;<b>Size</b>&nbsp;</th> 
 
        <th style="text-align: center;">&nbsp;<b>Color & Quantity</b>&nbsp;</th> 
 
        </tr> 
 
        </thead> 
 
        
 
        <tbody> 
 
        <tr id='C1' class='customer'> 
 
        <td><input type="checkbox" name="chk"/></td> 
 
        <td><select name="size[]" id="size" required="" > 
 
        <option value="">Select Size</option></select></td> 
 
        <td> 
 

 
        <TABLE style="margin-top: 20px;" id="dataTable1" width="400px" border="1"> 
 
        <thead> 
 
        <th>&nbsp;Select&nbsp;</th>  
 
        <th>&nbsp;<b>Color&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Quantity</b>&nbsp;</th> 
 
        </thead> 
 
        <TR> 
 
        <TD><INPUT type="checkbox" name="chk"/></TD> 
 
        <TD> 
 
        <select name="color[]" required="" > 
 
        <option value="">Select Color</option> 
 
        <option value="Red">Red</option> 
 
        <option value="Green">Green</option> 
 
         <option value="Blue">Blue</option> 
 
         <option value="Black">Black</option> 
 
        
 
        </select> 
 
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
 
        <input type="number" name="dress_quantity[]" class="qty1" placeholder="Size Quantity" value="" required=""> 
 
        </TD> 
 
        </TR> 
 
        </TABLE> 
 
        
 
        <INPUT type="button" value="Add Row" onclick="addRow1('dataTable1')" /> 
 
        <INPUT type="button" value="Delete Row" onclick="deleteRow1('dataTable1')" /> 
 
        </td> 
 
        </tr> 
 
        </tbody> 
 
        </TABLE> 
 
        <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" /> 
 
        <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />

答えて

1

問題:

あなたが/コピー子行に親のHTMLをクローニングし、これは中・ターン(あなたのコードに基づいて、第1行目の)親IDが割り当てられています子供の行に。

addRow方法で問題を引き起こしコード:

newcell.innerHTML = table.rows[1].cells[i].innerHTML;

ソリューション:あなたが親のAdd Rowボタンをクリックしたときに

は、新しい子テーブルとボタンに異なるIDを割り当てます。

newcell.innerHTML = table.rows[1].cells[i].innerHTML;

if (i == colCount - 1) //last column which adds child table { //Get child table id of first row var tableID = table.rows[1].cells[i].childNodes[1].getAttribute("id"); //Replace all occurances of parent table id's with new unique table id for child table before writing the information to DOM newcell.innerHTML = table.rows[1].cells[i].innerHTML.replace(new RegExp(tableID,"g"), "dataTable" + Math.floor((Math.random() * 1000) + 1)); } else //For other columns there is no need to assign unique id for controls newcell.innerHTML = table.rows[1].cells[i].innerHTML; 

への注意:
私は Math.floor((Math.random() * 1000) + 1))を使用して乱数を生成しています

からaddRow方法で以下の行を交換してください。あなた自身のロジックに変更したいかもしれません。そのは今働いてたくさん

function addRow(tableID) { 
 
\t var table = document.getElementById(tableID); 
 
\t var rowCount = table.rows.length; 
 
\t var row = table.insertRow(rowCount); 
 

 
\t var colCount = table.rows[1].cells.length; 
 

 
\t for (var i = 0; i < colCount; i++) { 
 
\t \t var newcell = row.insertCell(i); 
 

 
\t \t if (i == colCount - 1) //last column 
 
\t \t { 
 
\t \t \t //Get child table id of first row 
 
\t \t \t var tableID = table.rows[1].cells[i].childNodes[1].getAttribute("id"); 
 
\t \t \t newcell.innerHTML = table.rows[1].cells[i].innerHTML.replace(new RegExp(tableID,"g"), "dataTable" + Math.floor((Math.random() * 1000) + 1)); 
 
\t \t } 
 
\t \t else 
 
\t \t \t newcell.innerHTML = table.rows[1].cells[i].innerHTML; 
 

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

 
function deleteRow(tableID) { 
 
\t try { 
 
\t \t var table = document.getElementById(tableID); 
 
\t \t var rowCount = table.rows.length; 
 

 
\t \t for (var i = 0; i < rowCount; i++) { 
 
\t \t \t var row = table.rows[i]; 
 
\t \t \t var chkbox = row.cells[0].childNodes[0]; 
 
\t \t \t if (null != chkbox && true == chkbox.checked) { 
 
\t \t \t \t if (rowCount <= 1) { 
 
\t \t \t \t \t alert("Cannot delete all the rows."); 
 
\t \t \t \t \t break; 
 
\t \t \t \t } 
 
\t \t \t \t table.deleteRow(i); 
 
\t \t \t \t rowCount--; 
 
\t \t \t \t i--; 
 
\t \t \t } 
 
\t \t } 
 
\t } catch (e) { 
 
\t \t alert(e); 
 
\t } 
 
} 
 

 
function addRow1(tableID) { 
 
\t var table = document.getElementById(tableID); 
 
\t var rowCount = table.rows.length; 
 
\t var row = table.insertRow(rowCount); 
 
\t var colCount = table.rows[1].cells.length; 
 

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

 
\t \t var newcell = row.insertCell(i); 
 

 
\t \t newcell.innerHTML = table.rows[1].cells[i].innerHTML; 
 
\t \t //alert(newcell.childNodes); 
 
\t \t switch (newcell.childNodes[0].type) { 
 
\t \t \t case "text": 
 
\t \t \t \t newcell.childNodes[0].value = ""; 
 
\t \t \t \t break; 
 
\t \t \t case "checkbox": 
 
\t \t \t \t newcell.childNodes[0].checked = false; 
 
\t \t \t \t break; 
 
\t \t \t case "select-one": 
 
\t \t \t \t newcell.childNodes[0].selectedIndex = 0; 
 
\t \t \t \t break; 
 
\t \t } 
 
\t } 
 
} 
 

 
function deleteRow1(tableID) { 
 
\t try { 
 
\t \t var table = document.getElementById(tableID); 
 
\t \t var rowCount = table.rows.length; 
 

 
\t \t for (var i = 0; i < rowCount; i++) { 
 
\t \t \t var row = table.rows[i]; 
 
\t \t \t var chkbox = row.cells[0].childNodes[0]; 
 
\t \t \t if (null != chkbox && true == chkbox.checked) { 
 
\t \t \t \t if (rowCount <= 1) { 
 
\t \t \t \t \t alert("Cannot delete all the rows."); 
 
\t \t \t \t \t break; 
 
\t \t \t \t } 
 
\t \t \t \t table.deleteRow(i); 
 
\t \t \t \t rowCount--; 
 
\t \t \t \t i--; 
 
\t \t \t } 
 
\t \t } 
 
\t } catch (e) { 
 
\t \t alert(e); 
 
\t } 
 
}
<style type="text/css"> 
 
\t table { 
 
\t \t border-collapse: collapse; 
 
\t \t width: 100%; 
 
\t \t border: 1px solid #1E90FF; 
 
\t } 
 

 
\t th, 
 
\t td { 
 
\t \t text-align: left; 
 
\t \t padding: 8px; 
 
\t \t border: 1px solid #1E90FF; 
 
\t } 
 

 
\t th { 
 
\t \t background-color: #1E90FF; 
 
\t \t color: white; 
 
\t } 
 
</style> 
 

 
<TABLE id="dataTable"> 
 
\t <thead> 
 
\t \t <tr> 
 
\t \t \t <th style="text-align: center;">&nbsp;Select&nbsp;</th> 
 
\t \t \t <th style="text-align: center;">&nbsp;<b>Size</b>&nbsp;</th> 
 
\t \t \t <th style="text-align: center;">&nbsp;<b>Color & Quantity</b>&nbsp;</th> 
 
\t \t </tr> 
 
\t </thead> 
 

 
\t <tbody> 
 
\t \t <tr id='C1' class='customer'> 
 
\t \t \t <td><input type="checkbox" name="chk" /></td> 
 
\t \t \t <td><select name="size[]" id="size" required=""> 
 
\t \t \t <option value="">Select Size</option></select></td> 
 
\t \t \t <td> 
 
\t \t \t \t <TABLE style="margin-top: 20px;" id="dataTable1" width="400px" border="1"> 
 
\t \t \t \t \t <thead> 
 
\t \t \t \t \t \t <th>&nbsp;Select&nbsp;</th> 
 
\t \t \t \t \t \t <th>&nbsp;<b>Color&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Quantity</b>&nbsp;</th> 
 
\t \t \t \t \t </thead> 
 
\t \t \t \t \t <TR> 
 
\t \t \t \t \t \t <TD> 
 
\t \t \t \t \t \t \t <INPUT type="checkbox" name="chk" /> 
 
\t \t \t \t \t \t </TD> 
 
\t \t \t \t \t \t <TD> 
 
\t \t \t \t \t \t \t <select name="color[]" required=""> 
 
\t \t \t \t \t \t \t \t <option value="">Select Color</option> 
 
\t \t \t \t \t \t \t \t <option value="Red">Red</option> 
 
\t \t \t \t \t \t \t \t <option value="Green">Green</option> 
 
\t \t \t \t \t \t \t \t <option value="Blue">Blue</option> 
 
\t \t \t \t \t \t \t \t <option value="Black">Black</option> 
 
\t \t \t \t \t \t \t </select> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
 
\t \t \t \t \t \t \t <input type="number" name="dress_quantity[]" class="qty1" placeholder="Size Quantity" value="" required=""> 
 
\t \t \t \t \t \t </TD> 
 
\t \t \t \t \t </TR> 
 
\t \t \t \t </TABLE> 
 

 
\t \t \t \t <INPUT type="button" value="Add Row" onclick="addRow1('dataTable1')" /> 
 
\t \t \t \t <INPUT type="button" value="Delete Row" onclick="deleteRow1('dataTable1')" /> 
 
\t \t \t </td> 
 
\t \t </tr> 
 
\t </tbody> 
 
</TABLE> 
 

 
<INPUT type="button" value="Add Row" onclick="addRow('dataTable')" /> 
 
<INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />

+0

感謝:) – Moon

+0

あなたは上記の実行されている例を確認することができます。 –

+0

ありがとうalot @Phani Kumar M – Moon

関連する問題