如何在动态创建的项目上运行每个循环?

时间:2014-10-20 11:33:09

标签: jquery

在我的帐单结算网页应用程序中,我尝试使用jQuery计算客户端item的{​​{1}}总计:

invoice

这适用于已保存所有项目的发票。

但是,在创建新发票时,会通过jQuery动态添加项目,并且上述功能不起作用。

我怎样才能让它与这些项目一起使用?

感谢您的帮助。

更新

这是创建新发票项目的链接:

$(function() {

  // Add a new row of item fields
  $('form.edit_invoice').on('click', '.add_fields', function(event) {   
    var regexp, time;
    time = new Date().getTime();
    regexp = new RegExp($(this).data('id'), 'g');
    $(this).closest('tr').before($(this).data('fields').replace(regexp, time)); // Replace ID with a unique ID
    calculateItemTotals();      
    event.preventDefault();
  });   

  // Update item total when item price or quantity gets changed
  $('input[id$="_price"], input[id$="_quantity"]').on('change', function() {
    calculateItemTotals();  
  });

});

function calculateItemTotals() {
  $('.item_fields').each(function() {

    var price = $(this).find('input[id$="_price"]').val();
    var quantity = $(this).find('input[id$="_quantity"]').val();

    var total = parseFloat(price) * parseFloat(quantity);

    $(this).find('.item_total').text(total);    
  });   
}

1 个答案:

答案 0 :(得分:2)

事实证明,动态创建的元素是标准的(多次询问)问题:对于动态创建的元素,您应该使用.on()的委托事件处理程序:

$('form.edit_invoice').on('change', 'input[id$="_price"], input[id$="_quantity"]', function()
{
    calculateItemTotals();  
});

Fiddle example