javascript - jQuery 不适用于添加的行

标签 javascript jquery html

我有一个表格允许用户输入多个股票

<table class="table1" id="table1">
  <thread>
    <tr>
      <th scope="col">Item Name</th>
      <th scope="col">Qty</th>
      <th scope="col">Rate</th>
      <th scope="col">Amount</th>
    </tr>
  </thread>
  <tbody>
    <tr>
     <td><input type="text"/></td>
     <td><input type="text" class="num" id="qty"/></td>
     <td><input type="text" class="num" id="rate"/></td>
     <td><input type="text" class="num" id="amt"/></td>
   </tr>
 </tbody>
</table>
<a id="add"><button>Add</button></a>

这段代码是添加一个新行:

<script type="text/javascript">
  $(document).ready(function() {
    $("#add").click(function() {
      var newrow = $("<tr><td><input type="text"/></td><td><input type=\"text\" id=\"qty\"/></td><td><input type="\text\" id="\rate\"/></td><td><input type="\text\" id="\amt\"/></td></tr>");
    newrow.insertAfter('#table1 tbody>tr:last');
    return false;
  });
  $(".num").keyup(function() {
    var id = $(this).attr('id');
    if (id == 'qty') {
      var i = parseFloat($("#rate").val())
      if (!isNaN(i)) {
        var t = ($(this).val()*$("#rate").val());
        $("#amt").val(t.toFixed(2));
      } else {
        $("#amt").val('');
      }
    } else if (id == 'rate') {
      var i = parseFloat($("#qty").val())
      if (!isNaN(i)) {
        var t = ($(this).val()*$("#qty").val());
        $("#amt").val(t.toFixed(2));
      } else {
        $("#amt").val('');
      }
    }
  });
});

计算在表格的第一行上运行完美,但是当我添加第二行时,计算不起作用。我哪里错了?

最佳答案

使用事件委托(delegate):

$('body').on('keyup', ".num", function() {
    // your code
});

此外,您还必须将类 .num 添加到您创建的元素中, 并且多个元素不能使用相同的 ID,而是 使用另一个属性(例如 data-id,这并不重要),

var newrow = $('<tr><td><input type="text" /></td><td><input type="text" class="num" data-id="qty"/></td><td><input type="text" data-id="rate"/></td><td><input type="text" class="num" data-id="amt" /></td></tr>');

并在您的函数中使用此属性获取它们:

$('body').on('keyup', ".num", function() {
    var $row = $(this).closest('tr');
    var $amt = $row.find('[data-id="amt"]');
    var $qty = $row.find('[data-id="qty"]');
    var $rate = $row.find('[data-id="rate"]');

    var id = $(this).attr('data-id');

    if (id == 'qty') {
        // now using `$rate` instead of $('#rate')
        var i = parseFloat($rate.val())

        // other code
    }

    // other code
});

关于javascript - jQuery 不适用于添加的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17038128/

相关文章:

javascript - 将欧洲数字和单位与波斯文本混合

javascript - CSS:当我附加新的 div 元素时,z-index 无法正常工作

html - 在 2 个特定点中 Bootstrap 响应问题

javascript - jquery 没有按预期计算总和

javascript - 如何使用JQuery选择第n个选项

html - 使用 CSS 动态调整 Sprite 图像的大小

html - 显示隐藏字段的验证消息

javascript - react 路由器dom v5默认路由不起作用

正则表达式 : Combinations of numbers and letters (i) except 1

javascript - 如何为背景图像提供 (100% - 40px) 高度?