Javascript 根据发票计算运费

Javascript 根据发票计算运费,javascript,jquery,Javascript,Jquery,考虑到以下情况:我将如何根据用户输入(我已经用id“carries”创建了)创建一个函数来计算carries 首先,对代码进行一些改进: 您似乎在多个HTML表行中使用相同的ID进行输入。HTML允许您在每个文档中只使用一次ID。在您的情况下,应该使用类而不是ID 删除所有数字中的逗号。不清楚这是否正确。您是将逗号用作千位分隔符(这样就可以了)还是十进制分隔符(这样就不行了)?这取决于您的本地号码格式 您不需要(自定义)函数roundNumber(),您可以使用Number.toFixed()

考虑到以下情况:我将如何根据用户输入(我已经用id“carries”创建了)创建一个函数来计算carries


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

  • 您似乎在多个HTML表行中使用相同的ID进行输入。HTML允许您在每个文档中只使用一次ID。在您的情况下,应该使用类而不是ID
  • 删除所有数字中的逗号。不清楚这是否正确。您是将逗号用作千位分隔符(这样就可以了)还是十进制分隔符(这样就不行了)?这取决于您的本地号码格式
  • 您不需要(自定义)函数
    roundNumber()
    ,您可以使用
    Number.toFixed()
    例如
    10.toFixed(2)
    返回
    10.00
  • update_total()
    函数中,您再次删除逗号,但在写入每行的
    itemLineTotal
    字段时从未添加它们
  • 我建议您使用一致的编码样式,例如,您有时使用驼峰大小写函数名(
    updatePrice()
    ),有时使用下划线(
    update\u total()
在您的代码示例中,每行似乎有一个
carries
输入。由于这在发票上并不常见,我假设这是一个错误,并且在整个发票中只有一个这样的输入

要计算总计,您必须计算所有
itemLineTotal
s的总和,然后添加
carries
的值。您应该在
update\u total()
中执行此操作。我制作了一把小提琴,它展示了一个有效的例子,希望它能帮助:


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

您想要什么还不清楚?在您使用它的上下文中是什么?它是用户输入表单中的一个附加字段,反过来将更新totalWhat确切地说是$itemRow?它是表行的jQuery对象吗?在这种情况下,您应该考虑使用类而不是ID,因为IDS在整个HTML文档中应该是唯一的(与SytItEnLimeToTe相同)。
/* 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);

};