在javascript发票上计算运费

时间:2013-12-20 17:15:30

标签: javascript jquery

鉴于以下内容:我如何根据用户输入(我已使用id“carriage”创建)来创建一个计算运输的函数?

/* Description: Update price function
 *  @param: $itemRow - Row Object
 **/
var updatePrice = function ($itemRow) {

  // Calculate the price of the row.  Remove and $ so the calculation doesn't break
  var price = $itemRow.find('#itemPrice').val().replace(",", "") * $itemRow.find('#itemQty').val();
  var carriage = $itemRow.find('#carriage').val();

  price = roundNumber(price, 2);
  isNaN(price) ? $itemRow.find('#itemLineTotal').val("N/A") : $itemRow.find('#itemLineTotal').val(price);
  update_total();

};


var update_total = function () {

  var total = 0;

  $('input#itemLineTotal').each(function (i) {
    price = $(this).val().replace(",", "");
    if (!isNaN(price)) total += Number(price);
  });

  total = roundNumber(total, 2);

  $('input#invGrandTotal').val('\u20AC' + total);

};

1 个答案:

答案 0 :(得分:0)

首先,对代码进行一些改进:

  • 您似乎对多个HTML表格行中的输入使用相同的ID。 HTML允许您每个文档只使用一次ID。在您的情况下,您应该使用类而不是ID。
  • 您删除所有数字中的逗号。目前尚不清楚这是否正确。你使用逗号作为千位分隔符(然后它没关系)或小数分隔符(然后它不是)?这取决于您的本地号码格式。
  • 您不需要(自定义?)功能roundNumber(),您可以使用Number.toFixed(),例如10.toFixed(2)返回10.00
  • update_total()功能中,您再次删除逗号,但在写入每行itemLineTotal字段时,您从未添加逗号。
  • 我建议你使用一致的编码风格,例如:你有时使用驼峰大小写函数名称(updatePrice()),有时候是下划线(update_total())。

在您的代码示例中,看起来每行有一个carriage输入。由于这在发票上并不常见,我认为这是一个错误,整张发票中只有一个这样的输入。

要计算总计,您必须计算所有itemLineTotal的总和,然后添加carriage的值。你应该在update_total()中做到这一点。我创建了一个小提琴,显示了一个工作示例,希望有所帮助:

http://jsfiddle.net/pascalockert/8G7mp/

(也许您必须调整上面提到的小数和千位分隔符。请参阅第10,11,21和25行。另外,请注意JavaScript对浮点数的限制)