javascript - querySelectorAll - 在两个不同的下拉菜单中隐藏选项的多个 ID
问题描述
我在同一页面中有两个带有两个不同 ID 的下拉菜单,当每个选项都选择“否”选项时,我希望它们隐藏<div>
我一直试图让工作成为功能document.querySelectorAll("#Id1, #Id2);
,但显然我做错了什么。
这是我到目前为止得到的:
document.querySelectorAll("#419177, #531703").addEventListener('change', function () {
var style = this.value == 'Sí' ? 'block' : 'none';
var style = this.value == 'Ok' ? 'block' : 'none';
var list = document.getElementsByClassName('option_type_419180') [0].style.display = style;
var list = document.getElementsByClassName('option_type_531704') [0].style.display = style;
});
<select id="419177" name="properties[Customize 1?]"><option value=""> Customize 1?--</option><option value="Sí">Sí</option><option value="No">No</option></select>
<div class="option_type_419180" data-parent-id="419180">
Available colors </div>
<hr>
<select id="531703" name="properties[Customize 2?]"><option value=""> Customize 2?--</option><option value="Ok">Ok</option><option value="No">No</option></select>
<div class="option_type_531704" data-parent-id="419180">
Available colors 2</div>
解决方案
首先,id 必须以字母开头。至于处理程序,由于这不是 JQuery,因此您需要遍历数组(Array.from,forEach)。我不确定这是否是最好的解决方案,也许值得通过委托进行事件处理。
另外,请注意,覆盖该style
值可能会导致意想不到的效果——您需要考虑之前的状态。例如,如果数字 n 是 3 或 5,我希望发生一些事情
var n = 3;
var doit = n === 3? 'yes': 'no'; // 'yes'
var doit = n === 5? 'yes': 'no'; // 'no'
只有the last
结果将始终被考虑在内。
考虑到这两者,您需要像这样更改代码:
var n = 3;
var doit = n === 3 ? 'yes': 'no'; // if doit is 'yes'
var doit = (doit === 'yes' || n === 5) ? 'yes': 'no'; // it's still 'yes'
Array.from(document.querySelectorAll("#s419177, #s531703"))
.forEach(select => {
select.addEventListener('change', function () {
var style = this.value == 'Sí' ? 'block' : 'none';
var style = this.value == 'Ok' ? 'block' : 'none';
var list = document.getElementsByClassName('option_type_419180') [0].style.display = style;
var list = document.getElementsByClassName('option_type_531704') [0].style.display = style;
})
});
<select id="s419177" name="properties[Customize 1?]">
<option value=""> Customize 1?--</option>
<option value="Sí">Sí</option>
<option value="No">No</option>
</select>
<div class="option_type_419180" data-parent-id="419180">
Available colors
</div>
<hr>
<select id="s531703" name="properties[Customize 2?]">
<option value=""> Customize 2?--</option>
<option value="Ok">Ok</option>
<option value="No">No</option>
</select>
<div class="option_type_531704" data-parent-id="419180">
Available colors 2
</div>
使用委托(此代码更通用,您可以添加任意数量的选择,包括在运行时。)
document.getElementById("selectors")
.addEventListener('change', function (e) {
var style = ['Sí', 'Ok'].includes(e.target.value) ? 'block' : 'none';
el = e.target.nextElementSibling; // get DIV
el.style.display = style;
})
<section id="selectors">
<select id="s419177" name="properties[Customize 1?]">
<option value=""> Customize 1?--</option>
<option value="Sí">Sí</option>
<option value="No">No</option>
</select>
<div class="option_type_419180" data-parent-id="419180">
Available colors
</div>
<hr>
<select id="s531703" name="properties[Customize 2?]">
<option value=""> Customize 2?--</option>
<option value="Ok">Ok</option>
<option value="No">No</option>
</select>
<div class="option_type_531704" data-parent-id="419180">
Available colors 2
</div>
</section>
推荐阅读
- python - 如何使用熊猫按字母顺序将数据分类?
- c# - 使用 C# Oracle 托管数据 nuget 和存储过程的 Arraybinding 示例
- javascript - 如何在排序的数字列表中合并连续的数字?
- python - 当参数恒定时,是否适合在 python 类中使用闭包?
- python - 在 Scala Spark 和 PySpark 之间传递多个 DataFrame
- javascript - 当应用程序在后台时,如何让服务人员处理推送?
- pyspark - 在 pyspark 数据框中查找连续数据
- reactjs - 在 Android 上强制退出并重新打开应用程序后,组件上的引用为空
- xml - 使用正确的 xpath 捕获值
- c - 为什么将 double 转换为 int 可能会产生不同的结果?