如何通过在表格中动态生成的按钮上的“onclick”删除表格中的一行?

Posted

技术标签:

【中文标题】如何通过在表格中动态生成的按钮上的“onclick”删除表格中的一行?【英文标题】:How can I delete a row in a table by 'onclick' on a button that is dynamically generated within the table? 【发布时间】:2021-11-30 06:35:22 【问题描述】:

我制作了一个动态生成的表格。 我必须在每一行的最后一列有一个按钮,只要我点击它就会发生两件事:

    整行将标有<strike>

    行的 ID 将进入一个特殊的数组。

每行中的最后一个 td 是来自名为 trash_button 的类中的一个按钮,一个 jQuery 函数链接到该按钮应该导致该类中的每个按钮在其行中添加一个名为 strikethrough 的部分

问题是我尝试制作的按钮不起作用。 即使该函数与他们的类相关联,但从我所做的测试来看,事实证明按下按钮甚至不会调用该函数。

我真的不明白这里出了什么问题。

function CreateTableFromJSON() 
  var animals = [
      "animalId": "1",
      "animalName": "elephent",
      "cageNum": "231",
      "legsNum": "4"
    ,
    
      "animalId": "2",
      "animalName": "tiger",
      "cageNum": "324",
      "legsNum": "56.00"
    ,
    
      "animalId": "3",
      "animalName": "wolf",
      "cageNum": "414",
      "legsNum": "210.40"
    
  ]
  
  var tableBody = '<table id="table"><tr class="tr tr1"><td class="td1">animal Id</td><td class="td1">animal name</td><td class="td1">cage Number</td><td class="td1">legs Number</td><td class="td1">delete</td></tr>';

  animals.forEach(function(d) 
     tableBody += '<tr class="tr tr2"><td class="td2">'+d.animalId
     +'</td><td class="td2">' +d.animalName
      +'</td><td class="td2">'+d.cageNum
      +'</td><td class="td2">'+d.legsNum
      +'</td><td class="td2"><input type="button" class="trash_button"><img src="https://via.placeholder.com/24"  ></input></td></tr>';
  );

  var divContainer = document.getElementById("showData");
  divContainer.innerhtml = tableBody;


$(document).ready(function() 
  $(".trash_button").on('click', function() 
    var currentRow = $(this).closest("tr");

    if (document.getElementById(currentRow.id).classList.contains('strikethrough')) 
      document.getElementById(currentRow.id).classList.remove('strikethrough');
     else 
      document.getElementById(currentRow.id).classList.add('strikethrough');
    
  );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button onclick="CreateTableFromJSON()" value="Create Table From JSON">animal table</button>

<div id="showData">(Div added by community)</div>

【问题讨论】:

欢迎。请参阅How to Ask 并拨打tour。 ID为showData的元素在哪里? 我已将容器元素添加到 sn-p。请进一步修改以证明问题。 【参考方案1】:

如果您要动态添加标记,则需要使用 event delegation 来捕捉按钮在 DOM 中冒泡时的点击。您还应该坚持使用 jQuery 或 vanilla JS。

function CreateTableFromJSON() 

  const animals = [
      "animalId": "1",
      "animalName": "elephent",
      "cageNum": "231",
      "legsNum": "4"
    ,
    
      "animalId": "2",
      "animalName": "tiger",
      "cageNum": "324",
      "legsNum": "56.00"
    ,
    
      "animalId": "3",
      "animalName": "wolf",
      "cageNum": "414",
      "legsNum": "210.40"
    
  ]

  let tableBody = '<table id="table"><tr class="tr tr1"><td class="td1">animal Id</td><td class="td1">animal name</td><td class="td1">cage Number</td><td class="td1">legs Number</td><td class="td1">delete</td></tr>';

  animals.forEach(function(d) 
    tableBody += '<tr class="tr tr2"><td class="td2">' + d.animalId + '</td><td class="td2">' + d.animalName + '</td><td class="td2">' + d.cageNum + '</td><td class = "td2">' + d.legsNum + '</td><td class="td2"><img class="trash_button" src="https://dummyimage.com/80x20/b87d7d/000&text=Delete" /></td></tr>';
  );

  $('#showData').html(tableBody);



$(document).ready(function() 
  $(document).on('click', '.trash_button', function() 
    $(this).closest('tr').toggleClass('strikethrough');
  );
);
.strikethrough  text-decoration: line-through; 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onclick="CreateTableFromJSON()" value="Create Table From JSON">animal table</button>
<table id="showData"></table>

【讨论】:

【参考方案2】:

我会使用 id 和 data 属性来专门针对每个元素:


animals.forEach( function(animal) 
  //I've shortened for brevity, note I'm also using backticks to use js literal syntax
  tableBody += `<tr class="tr" id="animal-$animal.animalId">
                  <td>$animal.animalName</td>
                  <td><button class="trash_button" data-id="$animal.animalId">Delete</button>
                </tr>`
);


......

$(document).ready(function() 
  $('.trash_button').on('click', function(button) 
    let id = button.data.id;
    $(`#animal-$id`).toggleClass('strikethrough');
  );
);

【讨论】:

以上是关于如何通过在表格中动态生成的按钮上的“onclick”删除表格中的一行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮 onClick 方法上动态设置 TextField 上的 ErrorMessage

java Jtable 如何动态添加button按钮

如何通过使用 onClick() 函数单击按钮来填充 Javascript 中的表格?

为按钮 OnClick 动态创建文件名

jquery easyui怎么动态改数据表格上的toolbar的按钮的样式和文字

点击按钮生成新的按钮表格,同时之前的按钮失去功能