Javascript 使用JQuery在5个SelectList之间禁用所选选项

Javascript 使用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

我的HTML页面中有5个选择框,我正在尝试禁用其他已选择的选择框中的所有选项,取消选择时也必须重新启用这些选项

到目前为止,我得出了这个结果:

使用这个JQuery

$('.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);
    });
});