我想用相同的选项过滤两个不同的下拉菜单,这样当第一个选项被选中时,在第二个下拉菜单中该值应该被隐藏。
我在之前的 stackoverflow 问题中玩过这个,发现它运行良好。请参阅下面的演示,它正是这样做的。它在另一个下拉列表中隐藏了一个值。
演示- 隐藏在另一个下拉列表中选择的下拉列表中的值
这在 MVC3 中是可能的,您需要做的就是使用 JavaScript 复制完整列表并将其存储在例如数组中。
Youn 然后可以使用类似于removeSelected
如下所示的代码来获取指定列表的选定值并将其从指定的目标列表中删除。
该方法将使用完整列表的本地副本,以便能够在删除项目之前“重新填充”列表,以确保再次添加任何未选择的项目。
无论您是否使用 MVC3,使用 JavaScript/jQuery 删除项目的功能都不会改变。MVC3 只是提供项目列表。
只是补充一下,您不需要每个项目的 id 值。如果他们都有独特的文字,你就可以了。正如您在下面看到的,我只是通过忽略 id 的值进行匹配。
var $ddl1 = $("#ddl1");
var $ddl2 = $("#ddl2");
var employees = [
{ Id: 0, Name: "Michael Jordan"},
{ Id: 1, Name: "Magic Johnson"},
{ Id: 2, Name: "Larry Bird"},
{ Id: 3, Name: "Some Guy"},
{ Id: 4, Name: "Another Dude"}
];
function resetEmployee($selectElement) {
$selectElement.empty();
employees.forEach(function(employee) {
$selectElement.append('<option value="' + employee.Id + '">' + employee.Name + '</option>');
});
};
resetEmployee($ddl1);
resetEmployee($ddl2);
removeSelected($ddl1, $ddl2);
removeSelected($ddl2, $ddl1);
function removeSelected($sourceSelect, $fromSelect) {
var fromSelectedValue = $fromSelect.val();
resetEmployee($fromSelect);
$fromSelect.find('option[value="' + $sourceSelect.val() + '"]').remove();
$fromSelect.val(fromSelectedValue);
};
$ddl1.on('change', function(){
removeSelected($ddl1, $ddl2);
});
$ddl2.on('change', function(){
removeSelected($ddl2, $ddl1);
});