Jquery 单击事件不会在新表行上触发

问题描述 投票:0回答:1

我正在尝试向表格添加新行,并且单元格中有一个下拉选择。单击事件适用于现有行,但不适用于新添加的行。有什么建议吗?

    <!DOCTYPE html>
<html>
<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<table id="mytable">
  <thead>
    <tr>
        <th rowspan="2">Line No.</th>
        <th rowspan="2">Record Series Number</th>
        <th rowspan="2">Records Series Name</th>
        <th rowspan="2">Temporary BOX#</th>
        <th rowspan="2">Disposal Date</th>

        <th colspan="2" style="text-align:center">Dates of Record</th>
        <th rowspan="2">Range</th>
        <th rowspan="2">Action</th>
    </tr>
    <tr>
        <th scope="col">From</th>
        <th scope="col">To</th>
    </tr>
  </thead>
  <tbody>
   <tr class="rows"><td>1</td ><td><select id="recordsNumber"><option value="" selected disabled hidden>Choose here</option><option value="CRA AND LPA CASE FILES">MAG-35-01</option><option value="ROLL NUMBER FILES">MAG 59-01</option><option value="HEARING DOCKETS">MAG 59-02</option></select></td><td><input type='text' id='recordsName' value="test" disabled /></td><td><input type='text' id='tempbox' /></td><td><input type='date' id='disposalDate' /></td><td><input type='date' id='from' /> </td><td><input type='date' id='to' /></td><td><input type='text' id='range' maxlength='200' /></td><td><button class='btn btn-danger btn-xs btn-delete'>Delete</button></td></tr>
  </tbody>
</table>

<button type="button" id="replicateButton">replicate</button>
</body>
<script>
  $(document).ready(function() {


$("#mytable tbody tr").on("click", function () {
      var $dropdown = $(this).find('select');
      var selectedText = $dropdown.find('option:selected').text();
      var selectedValue = $dropdown.val();
      $(this).find("input[id='recordsName']").val(selectedValue);
      $(this).find("input[id='recordsName']").prop('title', selectedValue);
      console.log($(this))
  })

    


  $("#replicateButton").on("click", function () {
      debugger;
      var newRow = "<tr><td>1</td><td><select id='recordsNumber'><option value='' selected disabled hidden>Choose here</option><option value='CRA AND LPA CASE FILES'>MAG-35-01</option><option value='ROLL NUMBER FILES'>MAG 59-01</option><option value='HEARING DOCKETS'>MAG 59-02</option></select></td><td><input type='text' id='recordsName' value='test' disabled /></td><td><input type='text' id='tempbox' /></td><td><input type='date' id='disposalDate' /></td><td><input type='date' id='from' /> </td><td><input type='date' id='to' /></td><td><input type='text' id='range' maxlength='200' /></td><td><button class='btn btn-danger btn-xs btn-delete'>Delete</button></td></tr>"
      $("table tbody").append(newRow);
      
  });
});
</script>
</html>

我正在尝试向每个新行添加点击事件

样品测试

jquery
1个回答
0
投票

您当前的代码仅将

click
侦听器添加到页面加载时存在的
tr
上,因此它不会将单击事件侦听器添加到尚不存在的
tr
中。您可以通过使用事件委托来解决此问题,方法是向父元素添加单击侦听器,然后仅在与 a
tr
:

匹配时才触发该事件
$("#mytable tbody").on("click", "tr", function () {
  // ...
});
© www.soinside.com 2019 - 2024. All rights reserved.