0

I am creating some dynamic rows in my table and attaching onclick listener to them:

var i=0;

while(i!=5){
    var row=table.insertRow(table.rows.length);
    var cell=row.insertCell(0);
    var cell1=row.insertCell(1);
    var cell2=row.insertCell(2);
    var cell3=row.insertCell(3);
    var cell4=row.insertCell(4);
    var cell5=row.insertCell(5);

    row.style.cursor="pointer";
    row.addEventListener("click",f1);

    i+=1;
}

function f1(){
    console.log(true);
}

But no matter how many times I click on the row, the event never gets triggered. Where am I going wrong here? Please help me

1 Answers1

1

Delegate to nearest static container

function f1(e) {
  console.log(e.target.closest("tr").id, ";", e.target.textContent);
}
table.addEventListener("click", f1)

var i = 0;
const table = document.getElementById("tb");
while (i != 5) {
  var row = table.insertRow(table.rows.length);
  var cell0 = row.insertCell(0);
  cell0.textContent = "row " + i + ", cell 0"
  var cell1 = row.insertCell(1);
  cell1.textContent = "row " + i + ", cell 1"
  var cell2 = row.insertCell(2);
  cell2.textContent = "row " + i + ", cell 2"
  var cell3 = row.insertCell(3);
  cell3.textContent = "row " + i + ", cell 3"
  var cell4 = row.insertCell(4);
  cell4.textContent = "row " + i + ", cell 4"
  var cell5 = row.insertCell(5);
  cell5.textContent = "row " + i + ", cell 5"
  row.style.cursor = "pointer";
  row.id = `Row${i}`;
  i += 1;
}

function f1(e) {
  console.log(e.target.closest("tr").id, ";", e.target.textContent);
}
table.addEventListener("click", f1)
td {
  border: 1px solid black;
}
<table>
  <tbody id="tb"></tbody>
</table>

Newer way to create a table of 5 by 6 using map and template literals

const f1 = e => console.log(e.target.closest("tr").id, ";", e.target.textContent);
const numRows = 5, numCells = 6;
const table = document.getElementById("tb");
table.innerHTML = Array.from({length:numRows})
  .map((_,i) => `<tr id="Row${i}">
    ${Array.from({length:numCells})
      .map((_,j) => `<td>Row ${i}, cell ${j}</td>`)
      .join('')}
  </tr>`)
  .join('');

table.addEventListener("click", f1)
td {
  border: 1px solid black;
}
tr { cursor = "pointer"; }
<table>
  <tbody id="tb"></tbody>
</table>
mplungjan
  • 169,008
  • 28
  • 173
  • 236