2013-12-17 2 views
0

При добавлении новой строки счета-фактуры. Я хочу получить промежуточный итог в последнем поле. Только первая строка работает правильно. когда я добавляю новую строку, что подсчет строк не происходитДинамическое поле ввода промежуточного итога в строке jQuery

Номер: Нет. : Item Desc: Цена: ставка налога. : Sub Total: Я хочу, чтобы промежуточный итог для каждого рассчитывался, как только количество и цена вводились в каждой строке. Используя jquery или javascript.

http://jsfiddle.net/vXHa6/

$(function() { 
    // Append Invoice Line 
     $(document).on('click', '#addnewitem', function() { 
     var currentTable = $(this).closest('table').attr('id'); 
     $('#' + currentTable).append('<tr><td><div class="col-sm-6 col-lg-12"><input      type="Client Name" class="form-control" id="c_name" placeholder="Item"></div></td><td><div class="col-sm-6 col-lg-12"><textarea class="form-control" placeholder="Description" rows="2" > </textarea></div></td><td><div class="col-sm-6 col-lg-12"><input type="Client Name" class="form-control" id="item_price" placeholder="Item Price" name="item_price"></div></td><td><div class="col-sm-6 col-lg-12"><select name="tax" class="form-control" id="tax"><option value="0">None</option><option value="12.5">(12.5%) Service Tax </option></select></div></td><td><div class="col-sm-6 col-lg-12"><input type="Client Name" class="form-control price" id="item_tax" placeholder="Tax Amount" name="item_tax"></div></td><td><div class="col-sm-6 col-lg-12"><input type="Client Name" class="form-control price" id="sub_total" placeholder="Sub Total" name="sub_total[]"></div></td><td><button type="button" id="removeItem" class="btn btn-default removeItem"><span class="glyphicon glyphicon-trash"></span></td></tr>'); 
    }); 





//Remove Invoice Line 
    $(document).on('click', '#removeItem', function() { 
     var currentTable = $(this).closest('table').attr('id'); 
     $(this).closest('tr').remove(); 
calculateTableSum(currentTable); 
    calculateTotal(); 
    }); 


     function calculateSum() { 
     var currentTable = $(this).closest('table').attr('id'); 
    calculateTableSum(currentTable); 
     } 

     function calculateTableSum(currentTable) { 
    var sum = 0; 
      $('#' + currentTable + ' input#sub_total').each(function() { 
    //add only if the value is number 
    if(!isNaN(this.value) && this.value.length!=0) { 
     sum += parseFloat(this.value); 
    } 
     }); 
     //.toFixed() method will roundoff the final sum to 2 decimal places 
     $('#' + currentTable + ' input.sumamtcollected').val(sum.toFixed(2)); 
     } 
     $(document).on('change', 'input#sub_total', calculateSum); 


    $('#tax').on('change', function() { 
    var currentTable = $(this).closest('table').attr('id'); 
    var itemprice = $('#item_price').val(); 
    var taxrate = $('#tax').val(); 

    var tax = taxrate * itemprice /100; 
var total = parseFloat(itemprice) + parseFloat(tax); 

    $('#item_tax').val(tax.toFixed(2)); 
    $('#sub_total').val(total.toFixed(2)); 
    calculateTableSum(currentTable); 
    calculateTotal(); 
}); 


}); 
+0

См. Обновленный ответ ниже. Сначала я неправильно читаю. – Tomanow

ответ

0

Вы создаете несколько идентификаторов, которые являются одинаковыми. Вы захотите сделать несколько вещей.

  1. Создание инкрементора так, что идентификаторы уникальны
  2. Добавить слушателей, когда они добавляют новые строки для новых элементов

fiddle

Обновлено JS:

$(function() { 
    var INC = 0; 
    // Append Invoice Line 
    $('#addnewitem').click(function() { 
     INC++; 
     var currentTable = $(this).closest('table').attr('id'); 
     $('#' + currentTable).append('<tr><td><div class="col-sm-6 col-lg-12"><input type="Client Name" class="form-control" id="c_name_' + INC + '" placeholder="Item"></div></td><td><div class="col-sm-6 col-lg-12"><textarea class="form-control" placeholder="Description" rows="2" > </textarea></div></td><td><div class="col-sm-6 col-lg-12"><input type="Client Name" class="form-control" id="item_price_' + INC + '" placeholder="Item Price" name="item_price"></div></td><td><div class="col-sm-6 col-lg-12"><select name="tax" class="form-control" id="tax_' + INC + '"><option value="0">None</option><option value="12.5">(12.5%) Service Tax </option></select></div></td><td><div class="col-sm-6 col-lg-12"><input type="Client Name" class="form-control price" id="item_tax_' + INC + '" placeholder="Tax Amount" name="item_tax"></div></td><td><div class="col-sm-6 col-lg-12"><input type="Client Name" class="form-control price" id="sub_total_' + INC + '" placeholder="Sub Total" name="sub_total_' + INC + '"></div></td><td><button type="button" id="removeItem_' + INC + '" class="btn btn-default removeItem"><span class="glyphicon glyphicon-trash"></span></td></tr>').promise().done(function() { 
      $('#sub_total_' + INC).on('change', calculateSum); 
      $('#tax_' + INC).on('change', function() { 
       doMain(INC) 
      }); 
     }); 
    }); 

    //Remove Invoice Line 
    $('#removeItem').click(function() { 
     var currentTable = $(this).closest('table').attr('id'); 
     $(this).closest('tr').remove(); 
     calculateTableSum(currentTable); 
     calculateTotal(); 
    }); 

    function calculateTotal() { 
    } 

    function calculateSum() { 
     var currentTable = $(this).closest('table').attr('id'); 
     calculateTableSum(currentTable); 
    } 

    function calculateTableSum(currentTable) { 
     var sum = 0; 
     $('#' + currentTable + ' input[id^=sub_total]').each(function() { 
      //add only if the value is number 
      if (!isNaN($(this).val()) && $(this).val().length != 0) { 
       sum += parseFloat($(this).val()); 
      } 
     }); 
     //.toFixed() method will roundoff the final sum to 2 decimal places 
     $('#' + currentTable + ' input.sumamtcollected').val(sum.toFixed(2)); 
    } 

    $('#sub_total').on('change', calculateSum); 

    function doMain(num) { 
     if (num === 0) { 
      var currentTable = $(this).closest('table').attr('id'); 
      var itemprice = $('#item_price').val(); 
      var taxrate = $('#tax').val(); 

      var tax = taxrate * itemprice/100; 
      var total = parseFloat(itemprice) + parseFloat(tax); 

      $('#item_tax').val(tax.toFixed(2)); 
      $('#sub_total').val(total.toFixed(2)); 
      calculateTableSum(currentTable); 
      calculateTotal(); 
     } else { 
      var currentTable = $(this).closest('table').attr('id'); 
      var itemprice = $('#item_price_' + num).val(); 
      var taxrate = $('#tax_' + num).val(); 

      var tax = taxrate * itemprice/100; 
      var total = parseFloat(itemprice) + parseFloat(tax); 

      $('#item_tax_' + num).val(tax.toFixed(2)); 
      $('#sub_total_' + num).val(total.toFixed(2)); 
      calculateTableSum(currentTable); 
      calculateTotal(); 
     } 
    } 

    $('#tax').on('change', function() { 
     doMain(0); 
    }); 

}); 
+0

не то, что промежуточный итог .. когда я добавляю новую строку, что строка subtotal .. – user2154027

+0

Ah okay, обновит сообщение. – Tomanow

+0

nw удалить и рассчитать общее количество неработающих – user2154027

Смежные вопросы