在此代码中,我根据表单添加了许多值,并减去创建新总计的最低值。代码效果很好。我想做的不是只有新的总数在底部,我想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;
}
答案 0 :(得分: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
<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>
答案 1 :(得分:-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)
}
}