javascript - 从总值中添加或减去函数
问题描述
因此,我想根据单击的 div(减号或加号)从总计中添加或减去一个值。计数器还显示值是多少(我正在工作)。所以我想计算点击项目的总数。
我现在的代码:
var minExtras = document.querySelectorAll(".extra-min");
var plusExtras = document.querySelectorAll(".extra-plus");
var totalPrice = document.getElementById("totalPrice");
totalPrice.innerHTML = "Totaalprijs: € ";
Array.prototype.forEach.call(minExtras, function (minExtra) {
minExtra.addEventListener('click', function() {
var currentCount = minExtra.parentElement.querySelector('.count').innerText;
if (currentCount !== "1") {
var newCount = currentCount - 1;
minExtra.parentElement.querySelector('.count').innerText = newCount;
}
var colorMin = minExtra.parentElement.querySelector('.extra-min');
if (newCount === 1) {
colorMin.setAttribute("class", "change-extra min extra-min");
}
var extraPrice = minExtra.parentElement.querySelector('.extraPrice').innerText;
var extraPriceValue = extraPrice * newCount;
calculateMin(extraPriceValue);
})
});
Array.prototype.forEach.call(plusExtras, function (plusExtra) {
plusExtra.addEventListener('click', function() {
var currentCount = plusExtra.parentElement.querySelector('.count').innerText;
var newCount = +currentCount + +1;
plusExtra.parentElement.querySelector('.count').innerText = newCount;
var colorMin = plusExtra.parentElement.querySelector('.extra-min');
if (newCount !== 1) {
colorMin.setAttribute("class", "change-extra min extra-min color");
} else {
colorMin.setAttribute("class", "change-extra min extra-min");
}
var extraPrice = plusExtra.parentElement.querySelector('.extraPrice').innerText;
var extraPriceValue = extraPrice * newCount;
calculatePlus(extraPriceValue);
})
});
function calculatePlus(price) {
//function here
totalPrice.innerHTML = calculatedPrice;
}
function calculateMin(price) {
//function here
totalPrice.innerHTML = calculatedPrice;
}
.item {
margin-bottom: 10px;
width: 120px;
padding: 20px;
border: 1px solid #C5C5C5;
}
.show-extra-container {
display: -webkit-flex;
display: flex;
-justify-content: flex-start;
justify-content: flex-start;
-webkit-align-items: center;
align-items: center;
}
.extra-aantal {
padding: 0px 14px;
font-weight: 700;
font-size: 16px;
}
.change-extra {
font-weight: 700;
font-size: 28px;
color: #EC008C;
cursor: pointer;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
.change-extra.min {
background-color: #C5C5C5;
width: 14px;
height: 3px;
margin-top: 3px;
border-radius: 4px;
}
.change-extra.min.color {
background-color: #EC008C;
}
#totalPrice {
font-weight: 700;
}
<div id="showextra1" class="item">
<label class="col-form-label">Aantal personen</label>
<div class="show-extra-container">
<span class="extraPrice" style="display: none;">10</span>
<div class="change-extra min extra-min"></div>
<div class="extra-aantal count">1</div>
<div class="change-extra plus extra-plus">+</div>
</div>
</div>
<div id="showextra2" class="item">
<label class="col-form-label">Aantal personen</label>
<div class="show-extra-container">
<span class="extraPrice" style="display: none;">5</span>
<div class="change-extra min extra-min"></div>
<div class="extra-aantal count">1</div>
<div class="change-extra plus extra-plus">+</div>
</div>
</div>
<div class="item">
<div id="totalPrice"></div>
</div>
所以这段代码非常适合我需要的东西。现在我只需要计算总价并设置innerHTML of totalPrice
. 我正在考虑使用单独的函数calculateMin()
和calculatePlus()
. 但是我不知道如何编写这个计算总数的函数。有谁知道如何做到这一点?
解决方案
试试这样:
var minExtras = document.querySelectorAll(".extra-min");
var plusExtras = document.querySelectorAll(".extra-plus");
var totalPrice = document.getElementById("totalPrice");
totalPrice.innerHTML = "Totaalprijs: € ";
var calculatedPrice = 0;
//count initial price
Array.prototype.forEach.call(document.querySelectorAll('.show-extra-container'), function(container) {
calculatedPrice += parseInt(container.querySelector('.count').innerText) * parseFloat(container.querySelector('.extraPrice').innerText);
});
totalPrice.innerHTML = "Totaalprijs: € " + calculatedPrice;
Array.prototype.forEach.call(minExtras, function(minExtra) {
minExtra.addEventListener('click', function() {
var currentCount = minExtra.parentElement.querySelector('.count').innerText;
if (currentCount !== "1") {
var newCount = currentCount - 1;
minExtra.parentElement.querySelector('.count').innerText = newCount;
} else {
return;
};
var colorMin = minExtra.parentElement.querySelector('.extra-min');
if (newCount === 1) {
colorMin.setAttribute("class", "change-extra min extra-min");
}
var extraPrice = minExtra.parentElement.querySelector('.extraPrice').innerText;
//calculateMin: -1
calculatedPrice -= parseFloat(extraPrice);
totalPrice.innerHTML = "Totaalprijs: € " + calculatedPrice;
})
});
Array.prototype.forEach.call(plusExtras, function(plusExtra) {
plusExtra.addEventListener('click', function() {
var currentCount = plusExtra.parentElement.querySelector('.count').innerText;
var newCount = +currentCount + +1;
plusExtra.parentElement.querySelector('.count').innerText = newCount;
var colorMin = plusExtra.parentElement.querySelector('.extra-min');
if (newCount !== 1) {
colorMin.setAttribute("class", "change-extra min extra-min color");
} else {
colorMin.setAttribute("class", "change-extra min extra-min");
}
var extraPrice = plusExtra.parentElement.querySelector('.extraPrice').innerText;
//calculatePlus: +1
calculatedPrice += parseFloat(extraPrice);
totalPrice.innerHTML = "Totaalprijs: € " + calculatedPrice;
})
});
.item {
margin-bottom: 10px;
width: 120px;
padding: 20px;
border: 1px solid #C5C5C5;
}
.show-extra-container {
display: -webkit-flex;
display: flex;
-justify-content: flex-start;
justify-content: flex-start;
-webkit-align-items: center;
align-items: center;
}
.extra-aantal {
padding: 0px 14px;
font-weight: 700;
font-size: 16px;
}
.change-extra {
font-weight: 700;
font-size: 28px;
color: #EC008C;
cursor: pointer;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
.change-extra.min {
background-color: #C5C5C5;
width: 14px;
height: 3px;
margin-top: 3px;
border-radius: 4px;
}
.change-extra.min.color {
background-color: #EC008C;
}
#totalPrice {
font-weight: 700;
}
<div id="showextra1" class="item">
<label class="col-form-label">Aantal personen</label>
<div class="show-extra-container">
<span class="extraPrice" style="display: none;">10</span>
<div class="change-extra min extra-min"></div>
<div class="extra-aantal count">1</div>
<div class="change-extra plus extra-plus">+</div>
</div>
</div>
<div id="showextra2" class="item">
<label class="col-form-label">Aantal personen</label>
<div class="show-extra-container">
<span class="extraPrice" style="display: none;">5</span>
<div class="change-extra min extra-min"></div>
<div class="extra-aantal count">1</div>
<div class="change-extra plus extra-plus">+</div>
</div>
</div>
<div class="item">
<div id="totalPrice"></div>
</div>
- 计算每个项目的初始
calculatedPrice
(.count
* ).extraPrice
- 单击-或+时,只需
.extraPrice
为该项目添加或删除一个 return
minExtra
如果计数已经最小为 1,则来自侦听器。
推荐阅读
- c - C - 如果超过 1 或
- swift - 如何将accessibilityIdentifier 添加到UIAlertController 中的textField
- javascript - Vanilla Js 和 AWS Cognito (AWS Amplify) - 安全吗?
- python - 带有 python、Boto3 和 QuickSight 开发工具包的 AWS Lambda 函数,收到错误消息:InvalidParameterValueException/Invalid ResourceId
- c# - 在服务器和客户端(C# Asp Core)之间共享 HTTP API 接口并在编译时进行验证
- java - 在我的 Minecraftserver 上,我的插件无法加载
- git - 不小心把我的整个C盘变成了本地git仓库
- python - 无法在 Linux 上激活虚拟环境(Docker 快速入门终端虚拟机)
- javascript - 将全局变量传递给ajax函数,发布到php,保存到数据库
- c - 当你在 C 中达到一个句点时如何停止读取文件