0

在这段代码中,我根据表格添加了一些值,并减去创建新总数的最低值。代码效果很好。我想要做的不仅仅是在底部有新的总数,我想要 3。一个说没有减法的原始总数,一个是我减去的最低价格的值,最后是实际的新的总数。截至目前,它只显示新的总数。

示例:有 3 件商品,一条围巾 5 美元,一顶帽子 10 美元,一件夹克 20 美元。我将所有等于 35 美元的值相加,然后减去 5 美元的围巾的最低值,得到新的总计 30 美元。我想在底部显示这个。

总计:35 美元折扣:-5 美元新总计:30 美元

该函数已经计算出所有这些值,我只是不知道如何从函数中调用它们。

// All selected prices are stored on a array
var prices = [];

// A function to remove a item from an array
function remove(array, item) {
    for (var i = 0, len = array.length; i < len; i++) {
        if (array[i] == item) {
            array.splice(i, 1);
            return true;
        }
    }
    return false;
}

function calculateSectedDues(checkbox, amount) {
    // We add or remove the price as necesary

if (checkbox.checked) {
    prices.push(amount);
} else {
    remove(prices, amount);
}

// We sum all the prices
var total = 0;
for (var i = 0, len = prices.length; i < len; i++)
    total += prices[i];

// We get the lower one
var min = Math.min.apply(Math, prices);


if(min == Infinity) { min = 0; };

// And substract it
total -= min;

document.grad_enroll_form.total.value = total;

}

4

2 回答 2

1

这是一些基本代码,只写出值。我仍然不同意您从数组中删除元素的循环。

<span id="value"></span>
var prices = [];

function remove(arr,itm){
    var indx = arr.indexOf(itm);
    if (indx !== -1){
        arr.splice(indx,1);
    }
}

function calculateSectedDues(checkbox, amount) {
    if (checkbox.checked === true) {
        prices.push(amount);
    } else {
        remove(prices, amount);
    }

    var total = 0;
    for (var i = 0, len = prices.length; i < len; i++)
        total += prices[i];

    var min = prices.slice().sort(function(a,b){return a-b})[0];
    if(typeof min === 'undefined') min = 0;

    var withDiscount = total - min;
    var discountAmount = withDiscount - total;
    
    document.querySelector("#value").innerHTML = "Total: $"+total+'<br>';
    document.querySelector("#value").innerHTML += "Discount: $"+discountAmount+'<br>';
    document.querySelector("#value").innerHTML += "New total: $"+withDiscount+'<br>';
}

像这样运行:

calculateSectedDues({checked:true},10);
calculateSectedDues({checked:true},20);
calculateSectedDues({checked:true},5);

给出这个输出:

总计:35 美元
折扣:-5 美元
新总计:30 美元

JSFiddle


使用复选框

<label><input type="checkbox" onclick="calculateSectedDues(this,5)" name="Scarf"> <span>Scarf</span><label><br>
<label><input type="checkbox" onclick="calculateSectedDues(this,10)" name="Hat"> <span>Hat</span><label><br>
<label><input type="checkbox" onclick="calculateSectedDues(this,20)" name="Jacket"> <span>Jacket</span><label><br>

<span id="value">Total: $0<br>Discount: $0<br>New total: $0</span>
于 2013-04-18T18:04:55.177 回答
-1

我不知道你的 HTML 是什么样的,但这样的东西会起作用。它使用 jQuery 来获取所有选中的复选框,并将这些复选框的值添加到总数中并跟踪最小值。然后它在一个对象中返回所有三个值。

我假设您的复选框的值是商品的价格,这可能不是真的。如果没有,这个想法仍然有效,你只需要做更多的工作才能得到正确的价格。

function calculate() {
    var total = 0, 
        discount = 0
    ;

    $('input[type="checkbox"]:checked').each(function() {
        var val = parseFloat($(this).val());

        if(discount === 0 || val < discount) {
            discount = val; // keep track of minimum
        }

        total += val;
    });

    //return all three values in one object
    return {
        total: total,
        discount: disount,
        discountedPrice: (total - discount)
    }
}
于 2013-04-18T18:24:15.370 回答