javascript - 用户单击新的下拉选择选项后如何重置复选框值
问题描述
我有一个带有几个下拉选项的选择框。在每个选项下都会有一个清单和总计(每个清单项目都有一个值)。我需要使用纯 javascript 来完成此操作。
我的问题是我不知道如何使每个清单特定于其下拉项,并在用户单击新的下拉选项后重置复选框值。我已经尝试在totalIt
函数中调用该函数,display
但我无法让它工作。
我的 HTML 是:
<div>
<select id="store">
<option value="A">Location A</option>
<option value="B">Location B</option>
<option value="C">Location C</option>
</select>
</div>
<div class="box A">
Location A<br>
<input name="product" value="20" type="checkbox" onclick="totalIt()" /> 20%<br>
<input name="product" value="15" type="checkbox" onclick="totalIt()" /> 15%<br>
Total:
<input value="0" readonly="readonly" type="text" name="total" />
</div>
<div class="box B">
Location B
<br>
<input name="product" value="20" type="checkbox" onclick="totalIt()" /> 20%<br>
<input name="product" value="15" type="checkbox" onclick="totalIt()" /> 15%<br>
Total:
<input value="0" readonly="readonly" type="text" name="total" />
</div>
<div class="box C">
Location C
<br>
<input name="product" value="20" type="checkbox" onclick="totalIt()" /> 20%<br>
<input name="product" value="15" type="checkbox" onclick="totalIt()" /> 15%<br>
Total:
<input value="0" readonly="readonly" type="text" name="total" />
</div>
CSS:
.hide {
display: none;
}
JS:
document.querySelector("select#store").addEventListener("change", () => {
display(event.target.value);
});
const boxs = document.querySelectorAll("div.box");
// Select box show/hide div
function display(value) {
for (const box of boxs) {
if (box.classList.contains(value)) {
box.classList.remove("hide");
} else {
box.classList.add("hide");
}
}
}
display("A");
// Total the values of the checkboxes
function totalIt() {
var input = document.getElementsByName("product");
var total = 0;
for (var i = 0; i < input.length; i++) {
if (input[i].checked) {
total += parseFloat(input[i].value);
}
}
document.getElementsByName("total")[0].value = total + "%";
}
解决方案
你好,我得到解决你的问题...
document.querySelector("select#store").addEventListener("change", () => {
display(event.target.value);
});
const boxs = document.querySelectorAll("div.box");
// Select box show/hide div
function display(value) {
for (const box of boxs) {
if (box.classList.contains(value)) {
box.classList.remove("hide");
} else {
box.classList.add("hide");
}
}
}
display("A");
// Total the values of the checkboxes
function totalIt(Group) {
let input = document.querySelectorAll(`.${Group} [name=product]`),
total = 0,
totalInput = document.querySelector(`.${Group} [name=total]`)
input.forEach(input => {
if(input.checked) total += parseFloat(input.value);
totalInput.value = total + "%"
})
}
.hide {
display: none;
}
.box {
margin-top:30px;
}
<div>
<select id="store">
<option value="A">Location A</option>
<option value="B">Location B</option>
<option value="C">Location C</option>
</select>
</div>
<div class="box A">
Location A<br>
<input name="product" value="20" type="checkbox" onclick="totalIt('A')" /> 20%<br>
<input name="product" value="15" type="checkbox" onclick="totalIt('A')" /> 15%<br>
Total:
<input value="0" readonly="readonly" type="text" name="total" />
</div>
<div class="box B">
Location B
<br>
<input name="product" value="20" type="checkbox" onclick="totalIt('B')" /> 20%<br>
<input name="product" value="15" type="checkbox" onclick="totalIt('B')" /> 15%<br>
Total:
<input value="0" readonly="readonly" type="text" name="total" />
</div>
<div class="box C">
Location C
<br>
<input name="product" value="20" type="checkbox" onclick="totalIt('C')" /> 20%<br>
<input name="product" value="15" type="checkbox" onclick="totalIt('C')" /> 15%<br>
Total:
<input value="0" readonly="readonly" type="text" name="total" />
</div>
- 我转换
for loop
为forEach
数组循环 - 我将选择器从更改
getElementsByNames
为querySelector
和querySelectorAll
- 我向函数添加参数代表组
- 我注意到您为每个组添加类代表名称
- 我用它来使
input
选择器和totalInput
选择器专用于每个组......就像document.querySelectorAll(.a [name=product])
- 最后我在 html 中调用函数并键入名称组
推荐阅读
- html - 如何更改引导程序 4 选择器的默认下拉颜色?
- php - 避免使用 Laravel 查询返回“未定义偏移量 0”表为空
- google-chrome-devtools - 如何在 Chrome 开发者控制台中访问 `copy` 功能,当它被`覆盖时
`? - makefile - 需要帮助了解为什么 ifeq 不起作用
- ios - swift UITableView中的didSelectRow事件延迟
- ios - IOS swift Web Socket SRWebSocket 设置响应超时
- excel - Microsoft Excel 公式 - 如何将函数中的单元格引用替换为其他函数
- api - (SSG-WSG) 检索课程 API 和课程详细信息 API 的返回值不匹配
- c - 如何修复“未调用的结构化函数”
- python - urllib3:抛出 MaxRetryError 时如何获得响应?