将两个不同阵列的结果值一起添加

时间:2013-11-07 21:13:11

标签: javascript math

请查看我的示例 Fiddle

我为“转会”选择的学分有一个总计。当您选择积分数时,运行总计会增加。它旨在停止每节6个学分。这部分工作正常。

我要做的是将两个不同的结果集一起添加......

沟通 + 人文 = 总积分

...并将其显示在总积分:字段中。这是我迷路的地方。

我无法弄清楚如何将两个不同的字段组合在一起......

这就是我用来获得最终结果的方法......( 72是为了让计数最多停止在72转移信用

JavaScript ...

$(function($) {
    $('#total_Credits select').change(function() {
        var sum = 0;
        $('#total_Credits select').each(function(idx, elm) {
            sum += parseFloat(elm.value, 10);
        });

     $('#total_Credits').html(Math.min(sum,72).toFixed(2))
    });
});

HTML ...

Total Credits: &nbsp;&nbsp;<span id="total_Credits" style="color: red; font-weight:bold; font-size: 2em;"></span>  

2 个答案:

答案 0 :(得分:2)

你有很多问题在继续。

首先,id必须是唯一的。您不能拥有具有相同ID的多个列表。将“Credits”更改为不是id的类。

其次,没有#total_credits选择。所以改变事件永远不会发生。只要任何Credits选择更改,您就会计算和设置总计。您可以在现有的更改功能中执行此操作。为此,请获取每个选择的值并将其添加。

添加了一个小提琴:http://jsfiddle.net/Tnk9m/1/

calcTotals = function() {
    var grandTotal = 0;
    $('.total').each(function() {
        if ($(this).text()) grandTotal += parseFloat($(this).text(), 10);
    });
    $('#total_Credits').text(Math.min(grandTotal,72).toFixed(2));

};
$('#communication select').change(function () {
    var sum = 0;
    $('#communication select').each(function (idx, elm) {
        sum += parseFloat($(elm).val(), 10);
    });

    $('#total_communication').html(Math.min(sum, 6).toFixed(2));
    calcTotals();
});

等...

答案 1 :(得分:2)

每组选择不需要不同的功能。相反,你可以使用

$(function($) {
    var sum = function($els, prop) {
        var s = 0;
        $els.each(function(idx, elm) {
            s += parseFloat(elm[prop], 10) || 0;
        });
        return s;
    };
    $('.select-wrapper select').change(function() {
        var $wrap = $(this).closest('.select-wrapper');
        $wrap.find('.sum').html(Math.min(sum($wrap.find('select'), 'value'),6).toFixed(2));
        $('.total-sum').html(Math.min(sum($('.sum'), 'innerHTML'),72).toFixed(2));
    });
});

Demo

注意我已经对html进行了一些修改以使其正常工作,并且修复了重复id和无意义<br>等问题。