我有 12 个下拉输入区域,一年中的每个月份都有 1 个。每个下拉菜单都可以选择相同的 24 个选项。
我需要这样做,例如,如果在一月份的下拉框中选择了选项#4,则不能在任何其他下拉菜单中选择该选项#4。它仍然在下拉列表中,但只是被禁用。
这将有一个 ajax 触发器来检查其他下拉菜单的值并动态更改其他下拉菜单。
我可以做一个循环来动态检查和禁用这些值,而不必做很多 if 语句吗?
我有 12 个下拉输入区域,一年中的每个月份都有 1 个。每个下拉菜单都可以选择相同的 24 个选项。
我需要这样做,例如,如果在一月份的下拉框中选择了选项#4,则不能在任何其他下拉菜单中选择该选项#4。它仍然在下拉列表中,但只是被禁用。
这将有一个 ajax 触发器来检查其他下拉菜单的值并动态更改其他下拉菜单。
我可以做一个循环来动态检查和禁用这些值,而不必做很多 if 语句吗?
您可以使用 jQueryoption
在所有其他下拉列表中查找元素(在我的示例中,由某个指定class
...并且可以轻松更改为另一个选择器 - 我认为选择器"select"
太宽泛了),然后option
使用禁用实际元素.prop("disabled", true)
. 但这比这更棘手,因为您需要跟踪先前选择的值,以便在选择不同的值时再次启用下拉菜单。这是一个希望对您有所帮助的示例:
$(document).ready(function () {
$(".test").each(function () {
var $self = $(this);
$self.data("previous_value", $self.val());
});
$(".test").on("change", function () {
var $self = $(this);
var prev_value = $self.data("previous_value");
var cur_value = $self.val();
$(".test").not($self).find("option").filter(function () {
return $(this).val() == prev_value;
}).prop("disabled", false);
if (cur_value != "") {
$(".test").not($self).find("option").filter(function () {
return $(this).val() == cur_value;
}).prop("disabled", true);
$self.data("previous_value", cur_value);
}
});
});
因此,当您选择一个时,这会禁用所有其他下拉菜单的相同选项,并确保当您选择另一个时,在所有其他下拉菜单中启用前一个。例如,在第一个下拉列表中选择“3”...查看第二个下拉列表 - 看到“3”已禁用...返回第一个下拉列表并选择“1”...查看第二个下拉列表 -看到“3”再次启用,但“1”被禁用。这就是.data
我的代码中的用途。
当然,如果您 100% 确定所讨论的每个问题都相同,则可以替换使用value
with 。selectedIndex
options
select
只有大约 10 行,而且没有 ajax!
<select class="unique-value">
<option value="-1" selected="selected">Default</option>
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
</select>
<select class="unique-value">
<option value="-1" selected="selected">Default</option>
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
</select>
<select class="unique-value">
<option value="-1" selected="selected">Default</option>
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
</select>
Script:
$(document).ready(function(){
$('.unique-value').focus(function(){
var val = $(this).val();
$(this).attr('data-current-value', val);
});
$('.unique-value').change(function(){
var val = $(this).val();
if(val != -1)
$('.unique-value option[value=' + val + ']').attr('disabled', 'disabled');
var oldval = $(this).attr('data-current-value');
$('.unique-value option[value=' + oldval + ']').removeAttr('disabled');
});
});
我认为这将是最短的解决方案:
<select class="select-value">
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
</select>
<select class="select-value">
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
</select>
<select class="select-value">
<option value="1">First</option>
<option value="2">Second</option>
<option value="3">Third</option>
</select>
和jQuery代码:
$(document).on('change', '.select-attendee', function(){
$current=$(this);
$(".select-attendee").not($current).children("option[value='"+$current.val()+"']").attr('disabled', "disabled");
});
假设您每个月都有一个下拉菜单,并且每周都有一个选项。
<select class="month" id="october">
<option class="week" value="week1">Week One</option>
<option class="week" value="week2">Week Two</option>
</select>
假设您选择一周,然后收听该事件。
$(".month").change(function(event) {
// Get the week just selected.
var selectedWeek = $(this).children(".week:selected").val();
// Enabled all weeks before disabling the selected week.
$("option.week").removeAttr("disabled");
// Disable all week options matching this selection.
$("option.week[value="+selectedWeek+"]").attr("disabled", "disabled");
});