Javascript 使用JQuery在5个SelectList之间禁用所选选项
我的HTML页面中有5个选择框,我正在尝试禁用其他已选择的选择框中的所有选项,取消选择时也必须重新启用这些选项 到目前为止,我得出了这个结果: 使用这个JQueryJavascript 使用JQuery在5个SelectList之间禁用所选选项,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我的HTML页面中有5个选择框,我正在尝试禁用其他已选择的选择框中的所有选项,取消选择时也必须重新启用这些选项 到目前为止,我得出了这个结果: 使用这个JQuery $('.poli').on('keyup change', function () { $(this) .siblings('select') .children('option[value=' + this.value + ']') .attr('disabled', true) .siblings
$('.poli').on('keyup change', function () {
$(this)
.siblings('select')
.children('option[value=' + this.value + ']')
.attr('disabled', true)
.siblings().removeAttr('disabled');
});
然而,这并不太好,它只选择和禁用1个选项的时间
有解决方案吗?这会清除禁用;我正在编写启用代码,稍后将发布:
$('select').change( function () {
$('select').each(function() {
$(this).siblings('select').children('option[value=' + this.value + ']').attr('disabled', true);
});
});
您可以使用:
我已经更新了。您需要跟踪所选选项,并禁用其他选择框中的选项:
$('.poli').on('keyup change', function () {
var selected = [];
$(".poli option:selected").each(function () {
if ($(this).val() !== "")
selected.push($(this).val());
});
$(".poli:not(this) option").each(function () {
if (selected.indexOf($(this).val()) > -1)
$(this).prop("disabled", true);
else
$(this).prop("disabled", false);
});
});
首先,您不想这样做:
.sides().removeAttr('disabled')代码>因为这意味着在所有其他选择框中仅禁用最后一个选择。当没有一个选项具有该选项时,您希望启用(removeAttr('disabled')。因此,您需要在所有选择上迭代(.each()),并检查是否有任何选择了特定的选项。出于好奇,在$之前的波浪线做什么。inArray
做什么?我从来没见过before@billyonecan这就是将-1
转换为0,并将其用作虚假结果,这很好。从现在起,我必须开始使用它:p@billyonecan要知道,有些老板不喜欢它,觉得它不可读,这在某种程度上并没有错:)你应该过滤选择,查看更新的答案,如果它符合你的需要哦,好吧,其他人发布了解决方案——迭代并检查哪些选项是在其他地方选择的。
$('.poli').on('keyup change', function () {
var selected = [];
$(".poli option:selected").each(function () {
if ($(this).val() !== "")
selected.push($(this).val());
});
$(".poli:not(this) option").each(function () {
if (selected.indexOf($(this).val()) > -1)
$(this).prop("disabled", true);
else
$(this).prop("disabled", false);
});
});