显示基于彼此的两个下拉列表中的项目
Display items of two drop down based on each other
我有两个值完全相同的下拉列表。我希望下拉列表2显示基于下拉列表1的项目选择的值。因此,下拉列表2的选定索引将等于或大于下拉列表1的选定索引。
document.getElementById("SELECTB").selectedIndex >= document.getElementById("SELECTA").selectedIndex
因此,如果在下拉列表1中选择了B,则下拉列表2中的可选选项将是B、C和D。(A将不是可选项目)
http://jsfiddle.net/xxyhm78t/1/
使用纯Javascript的解决方案:
var select1 = document.getElementById("SELECTA");
var select2 = document.getElementById("SELECTB");
select1.onchange = function () {
while (select2.firstChild) {
select2.removeChild(select2.firstChild);
}
for (var i = select1.selectedIndex; i < select1.options.length; i++) {
var o = document.createElement("option");
o.value = select1.options[i].value;
o.text = select1.options[i].text;
select2.appendChild(o);
}
}
Fiddle
参考:这是javascript的一个调整后的解决方案基于其他下拉更改下拉值
更新:如评论中所述-禁用选项而不是删除它们:
var select1 = document.getElementById("SELECTA");
var select2 = document.getElementById("SELECTB");
select1.onchange = function () {
while (select2.firstChild) {
select2.removeChild(select2.firstChild);
}
for (var i = 0; i < select1.options.length; i++) {
var o = document.createElement("option");
o.value = select1.options[i].value;
o.text = select1.options[i].text;
(i <= select1.selectedIndex)
? o.disabled = true
: o.disabled = false ;
select2.appendChild(o);
}
}
调整后的Fiddle
更新2:就像注释中询问的那样,是否可以调整为使用类名而不是id——是的,使用getElementsByClassName()
。在这个Fiddle中,我已经将两个select
都调整为具有class="SELECTA"
和class="SELECTB"
,而不是以前使用的id
。Javascript的相应调整只是变量的声明:
var select1 = document.getElementsByClassName("SELECTA")[0];
var select2 = document.getElementsByClassName("SELECTB")[0];
如您所知,id
是一个唯一的属性,因此可以使用getElementById()
获得单个元素。getElementsByClassName()
返回HTML元素的集合,即使只有一个元素具有该类。因此,在本例中,有必要处理该集合的第一个元素。当计数从0开始时,第一个(也是唯一一个)具有类"SELECTA"的元素是getElementsByClassName("SELECTA")[0]
。
参考:https://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByClassName#Syntax
您可以使用selectedIndex和以下代码来完成此操作:
$("#SELECTA").change(function() {
var selIndex = this.selectedIndex;
$("#SELECTB").find("option").each(function(k,v) {
$(this).attr("disabled", selIndex > k);
});
});
如果选择了其中一个禁用值,则可能需要重置#SELECTB,具体取决于您所追求的内容。
我想这就是您想要的:
$("select").on("change", function (e) {
var sel = this.selectedIndex;
$("#SELECTB option").each(function (i, e) {
$(this).prop("disabled", sel > i);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="SELECTA">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<select id="SELECTB">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
这可能更为普遍:
$("select").on("change", function (e) {
var sel = this.selectedIndex;
var nextSelect = $(this).parent().find("select").not(this);
$(nextSelect).children().each(function (i, e) {
$(this).prop("disabled", sel > i);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="SELECTA">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<select id="SELECTB">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 根据两个下拉列表的默认值禁用按钮
- 根据前两个下拉ID显示第三个下拉列表
- 使用两个下拉列表的值填充文本框
- 需要在 html 中使用两个下拉列表来显示不同的 json 值
- 两个下拉列表中的文本字段
- 如何在AngularJS中显示基于两个下拉列表的内容
- 将同一个元素追加到两个下拉列表中只会导致最后一个元素被追加
- jQuery验证插件-比较两个选择下拉列表的自定义方法
- javascript动态下拉列表-两种形式相互依赖
- Kendo Grid UI水印列或一列的两个下拉列表
- jQuery ui自动完成下拉列表中的两个字段
- 在 Javascript URL 中传递两个变量,以根据传递的值更新下拉列表
- jQuery 使用两个下拉列表更改输入 css 样式
- 剑道UI [下拉列表] - 多个元素中的冲突
- 如何使用 AJAX 根据两个下拉列表的值从数据库中检索数据
- 使用 Ajax 一次填充两个下拉列表
- jQuery 下拉列表 将鼠标悬停在两个不同的元素上
- jquery克隆与HTML下拉选项两个下拉选择相同的值一个警报应该选择不同的值
- HTML 连接的下拉列表(多个),数字作为值