我正在尝试制作一个选择器,根据您在另一个选择字段中选择的内容显示选项。它看起来像这样:
<select name="field2" id="field2" required="required">
<option id="field2-1" value="os1">
os1
</option>
<option id="field2-2" value="os2">
os2
</option>
<option id="field2-3" value="os3">
os3
</option>
</select>
然后我有一个带有这些选项的第二个选择器:
<select name="field3" id="field3" required="required">
<option id="field3-1" value="dl1">
dl1
</option>
<option id="field3-2" value="dl2">
dl2
</option>
</select>
基本上我需要做的是:如果在第一个选择器中选择了os1,那么dl1和dl2将在第二个选择器中可用。
如果在第一个选择器中选择了os2或os3,则dl1将被隐藏,并且只有dl2将显示在第二个选择器中。
我似乎无法为此找到一个可靠的解决方案,但我不是js中最好的,所以希望你们其中一个能指出我正确的方向。
谢谢:)
答案 0 :(得分:1)
Vanilla JS解决方案(不需要jQuery) - DEMO
var selectOne = document.getElementById("field2");
selectOne.addEventListener("change", function() {
if (this.options[this.selectedIndex].value == 'os2' || this.options[this.selectedIndex].value == 'os3') {
document.getElementById('field3-2').style.display = "none";
} else {
document.getElementById('field3-2').style.display = "block";
}
}, false);
答案 1 :(得分:0)
有几种方法可以尝试这种方法,但也许最简单的方法之一就是隐藏两个“模板”SELECT元素,然后将html从这些隐藏的SELECT元素复制到#field3 SELECT元素。我假设在这个例子中你没有使用jQuery。
例如:
<SELECT id="template_1">
<option id="field3-1" value="dl1">
dl1
</option>
<option id="field3-2" value="dl2">
dl2
</option>
</SELECT>
<SELECT id="template_2">
<option id="field3-1" value="dl1">
dl1
</option>
<option id="field3-2" value="dl2">
dl2
</option>
</SELECT>
然后你的javascript将是:
var field2 = document.getElementById('field2');
var field3 = document.getElementById('field3');
var template1 = document.getElementById('template_1');
var template2 = document.getElementById('template_2');
var os = field2.options[field2.selectedIndex];
if (os == 'os1') {
field3.innerHTML = template1.innerHTML;
}
else {
field3.innerHTML = template2.innerHTML;
}
答案 2 :(得分:0)
编辑:抱歉,没有意识到缺少jquery
标签。好吧,如果您想使用jQuery,下面的代码将起作用:
$('#field2').change(function(){
if($(this).val() === 'os2' || $(this).val() === 'os3'){
$('#field3-1').hide();
}
else{
$('#field3-1').show();
}
});