如果存在#,则计算总数,如果未计算所有#s,则仍计算总数

时间:2012-05-16 15:06:15

标签: javascript jquery

如图所示,用户必须输入所有5个请求品牌(因为这不是必需的)是愚蠢的。也许他们只想选择一个要求的品牌。当前设置时,仅在用户输入5个单位成本和5个数量时才计算小计...不好。如果他们没有输入全部5,则小计返回NaN。

req brands

$("a#full_sub_total").click(function(event){
  event.preventDefault();

  var first = $("div#total_result").text();
  var second = $("div#total_result1").text();
  var third = $("div#total_result2").text();
  var fourth = $("div#total_result3").text();
  var fifth = $("div#total_result4").text();

  $("#full_total_results p").text((parseInt(first,10) + parseInt(second,10) + parseInt(third,10) + parseInt(fourth,10) + parseInt(fifth,10)));

});

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

基本技术:

var sum = 0;

var num1 = parseInt(text1, 10);
if (!isNaN(num1)) sum += num1;
// ...

(循环:更好的主意。)

答案 1 :(得分:1)

我会遍历total_result字段,并逐步将其解析后的值添加到总变量中:

$("a#full_sub_total").on("click", function(){
  var total = 0;
  $("div[id^=total_result]").text(function(i,t){
    total += parseInt( t, 10 ) || 0;
  });
  $(".full_total").text("$" + total);
});

注意所有这一切的主要部分:

total += parseInt( t, 10 ) || 0;

当尝试从元素文本中解析整数失败时,我们返回0。这不会抵消总价值,并且允许我们继续执行稍后出现的任何NaN

演示:http://jsbin.com/axowew/2/edit

答案 2 :(得分:0)

你的整体NaN总结果的问题是,当一个或多个单独的行总数为空时,它会导致你的整体结果总数等于你想要添加的NaN(即#+#=#,#+ NaN =楠)

简化问题的解决方案:

$('#subtotal').click(function(e) { 
e.preventDefault();

// Clear overall total
$('#overallTotal').empty();

// Loop through each line total
$('div.lineTotal').each(function() {
// If line total is not empty, add
if ($(this).text() != ''){
$('#overallTotal').text(parseInt($('#overallTotal').text) += parseInt($(this).text()));
}
});

});