动态创建 tr & td 并附加到 table。 onclick 传递 json 选中的对象

To create tr & td dynamically and append to table. Onclick pass the json selected object

将行追加到现有 table。每次点击时都必须传递所选对象。

function populateResult(data, resultElementId){
              $.each(data, function(i,row){

                      $tr = $('<tr><td>'+ row.name+'</td></tr>' ).appendTo(resultElementId);

                      $tr.on("click", myfunction(row));

              });
}



function myfunction(shipObj){
     console.log("data :"+JSON.stringify(shipObj));
}

myfunction 此方法未在 onclick 上调用。

注:我用的是jquery1.7

有多种方法可以满足您的需求。这是两个:

将点击处理程序分配给委托者父级

$("#table tbody").on("click", "tr", function() {
  // get the tbody TR index and that's its position in the data array
  const idx = $(this).index();
  const row = data[idx];
  myfunction(row);
});

使用已分配的点击处理程序创建 TR

function populateResult(data, resultElementId) {
  $.each(data, (i, row) => $("<tr>", {
    html: `<td>${row.name}</td>`,
    appendTo: resultElementId,
    click() {
      myfunction(row)
    }
  }));
}

最后一个例子的演示:

function populateResult(data, resultElementId) {
  $.each(data, (i, row) => $("<tr>", {
    html: `<td>${row.name}</td>`,
    appendTo: resultElementId,
    click() {
      myfunction(row)
    }
  }));
}

function myfunction(shipObj) {
  console.log("data :" + JSON.stringify(shipObj));
}

const data = [{name:"Lorem"}, {name: "Ipsum"}];
populateResult(data, "#myTableBody");
<table>
  <tbody id="myTableBody"></tbody>
</table>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

您可以将 row 的值设置为 json 对象,即:{'datas': row} inside click event handler 然后使用 event 对象访问它.即:e.data.datas .

演示代码 :

function populateResult(data, resultElementId) {
  $.each(data, function(i, row) {
    $trs = $(`<tr><td> ${row.name} </td></tr>`).appendTo(resultElementId);
    //on click pass that row as well
    $trs.on('click', {
      'datas': row
    }, myfunction);
  })

}
 function myfunction(e) {
 //use event object to access data
    console.log('Data :  ' + JSON.stringify(e.data.datas));
  }



populateResult([{
  "name": "s1",
}, {
  "name": "s2"
}], "#myTableBody")
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<table>
  <tbody id="myTableBody"></tbody>
</table>