我收到以下两个下拉列表
,我想删除在任一列表中选择的选项。因此,如果选择选项 1,它将不会出现在列表 2 中。
<select class='form-dropdown' name='first' id='first'>
<option value='none' selected>No Choice</option>
<option value='Workshop 1'> Workshop 1 </option>
<option value='Workshop 2'> Workshop 2 </option>
<option value='Workshop 3'> Workshop 3 </option>
<option value='Workshop 4'> Workshop 4 </option>
<option value='Workshop 5'> Workshop 5 </option>
</select>
<select class='form-dropdown' name='second' id='second'>
<option value='none' selected>No Choice</option>
<option value='Workshop 1'> Workshop 1 </option>
<option value='Workshop 2'> Workshop 2 </option>
<option value='Workshop 3'> Workshop 3 </option>
<option value='Workshop 4'> Workshop 4 </option>
<option value='Workshop 5'> Workshop 5 </option>
</select>
这在普通的旧 JavaScript 中怎么可能?
编辑:
错误Uncaught TypeError: Cannot read property 'addEventListener' of null
已通过在window.onload()中加载EventListener解决,见下文
window.onload = function () {
document.getElementById("first").addEventListener("change", function() {
show_all("second");
document.querySelector("#second option[value='"+this.value+"']").style.display="none";
});
document.getElementById("second").addEventListener("change", function() {
show_all("first");
document.querySelector("#first option[value='"+this.value+"']").style.display="none";
});
};
function show_all(select_name){
var second_options = document.querySelectorAll("#"+select_name+" option");
for(var i=0;i<second_options.length;i++){
second_options[i].style.display="block";
}
}
最佳答案
您可以将更改事件添加到第一个select
,然后隐藏第二个列表中与当前所选值具有相同值的选项,并且您可以添加另一个名为show_all()
在隐藏所选选项之前显示所有选项:
function show_all(){
var second_options = document.querySelectorAll("#second option");
for(var i=0;i<second_options.length;i++){
second_options[i].style.display="block";
}
document.getElementById("second").value='none';
}
document.getElementById("first").addEventListener("change", function() {
show_all();
document.querySelector("#second option[value='"+this.value+"']").style.display="none";
});
<select class='form-dropdown' name='first' id='first'>
<option value='none' selected>No Choice</option>
<option value='Workshop 1'> Workshop 1 </option>
<option value='Workshop 2'> Workshop 2 </option>
<option value='Workshop 3'> Workshop 3 </option>
<option value='Workshop 4'> Workshop 4 </option>
<option value='Workshop 5'> Workshop 5 </option>
</select>
<select class='form-dropdown' name='second' id='second'>
<option value='none' selected>No Choice</option>
<option value='Workshop 1'> Workshop 1 </option>
<option value='Workshop 2'> Workshop 2 </option>
<option value='Workshop 3'> Workshop 3 </option>
<option value='Workshop 4'> Workshop 4 </option>
<option value='Workshop 5'> Workshop 5 </option>
</select>
如果您想避免在两个列表中重复选择,您可以使用:
function show_all(select_name){
var second_options = document.querySelectorAll("#"+select_name+" option");
for(var i=0;i<second_options.length;i++){
second_options[i].style.display="block";
}
}
document.getElementById("first").addEventListener("change", function() {
show_all("second");
document.querySelector("#second option[value='"+this.value+"']").style.display="none";
})
document.getElementById("second").addEventListener("change", function() {
show_all("first");
document.querySelector("#first option[value='"+this.value+"']").style.display="none";
})
<select class='form-dropdown' name='first' id='first'>
<option value='none' selected>No Choice</option>
<option value='Workshop 1'> Workshop 1 </option>
<option value='Workshop 2'> Workshop 2 </option>
<option value='Workshop 3'> Workshop 3 </option>
<option value='Workshop 4'> Workshop 4 </option>
<option value='Workshop 5'> Workshop 5 </option>
</select>
<select class='form-dropdown' name='second' id='second'>
<option value='none' selected>No Choice</option>
<option value='Workshop 1'> Workshop 1 </option>
<option value='Workshop 2'> Workshop 2 </option>
<option value='Workshop 3'> Workshop 3 </option>
<option value='Workshop 4'> Workshop 4 </option>
<option value='Workshop 5'> Workshop 5 </option>
</select>
关于javascript - 纯 JavaScript 从下拉选择中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36234072/