根据其他</select>选项禁用<select>选项

时间:2013-04-25 16:41:21

标签: jquery

如果在其他选择中选择了精确选项,如何禁用select中的多个选项。我在这个链接上找到了类似于我的问题的回答问题: http://jsfiddle.net/dZqEu/

接下来是jQuery代码:

$(this).siblings('select').children('option').each(function() {
    if ( $(this).val() === value ) {
        $(this).attr('disabled', true).siblings().removeAttr('disabled');   
    }

问题是这仅适用于2个选择。我需要总共3个选项,这将禁用选择中相同值的可能性。

此代码不适用于3种选择: http://jsfiddle.net/dZqEu/968/

提前Tnx

注:

当select1设置为1时,select 2设置为2,我无法禁用select3中的值1和2。它仅禁用选择3 ...

中的值2

5 个答案:

答案 0 :(得分:7)

试试这个: - http://jsfiddle.net/Z2yaG/

使用焦点获取prev值并删除已禁用的值。 在您的html中,我为默认选项添加了值-1。

<option value="-1">No Match</option>

     var prev = -1;
$("select").change(function () {
    if ($(this).val() > -1) {
        $("select").not(this).find("option[value=" + $(this).val() + "]").attr('disabled', 'disabled');
    }
    $("select").not(this).find("option[value=" + previous + "]").removeAttr('disabled');
}).focus(function () {
    previous = $(this).val();
});

答案 1 :(得分:2)

这似乎有效:http://jsfiddle.net/QLn9b/1/

它使用您的原始代码:

$("select").change(function() {   
    $("select").not(this).find("option[value="+ $(this).val() + "]").attr('disabled', true);
});

答案 2 :(得分:1)

我认为这就是你要找的东西。

$('select').change(function() {

  var select_elements = $('select')
  $.each(select_elements, function(i,elem){
    var sel_values = [];

    // Selecting and Iterating on Sibling Selects        
    var siblis = $(elem).siblings('select')
    $.each(siblis, function(i, sibli){
        if($(sibli).val()!='No Match'){
            sel_values.push($(sibli).val());
        }
    });

    // Iterating on Options of Select
    $(this).children('option').each(function() {
        $(this).removeAttr('disabled');

        if($.inArray($(this).val(), sel_values) !== -1){
            $(this).attr('disabled', true);
        }
    });        

  });    
});

如果所有选择的值均为1到6,则

If select1 value      --> 1,
and select2 value     --> 3 (1 is disabled)
then in select3 value --> 5 (1,3 are disabled)

选择select3后,

In select1  --> 1 (3,5 disabled)
In select2  --> 3 (1,5 disabled)
In select3  --> 5 (1,3 disabled)

这是jsfiddle:http://jsfiddle.net/prem_nagalla1/rY4n3/

希望有所帮助:)

答案 3 :(得分:1)

这是一种方式。当任何下拉列表更改时,计算所有选定的值(第一个除外)。如果其他框的选定值出现在值列表中,请禁用相应的选项。

$('select').change(function() {
    var values = [],
    others = $(this).siblings('select'),
    all = others.andSelf();

    all.each(function() {
        if (this.selectedIndex > 0) {
            values.push(this.options[this.selectedIndex].value);
        }
    });

    others.each(function() {
        for (var i = 0; i < this.options.length; ++i) {
            this.options[i].disabled = $.inArray(this.options[i].value, values) !== -1;
        }
    });
});

Demo

答案 4 :(得分:0)

试试这个。

$('select').change(function() 
{    
    var value = $(this).val();
    $('option').removeAttr("disabled");
    $('select').each(function ()
    {
        $("option[value=" + $(this).val() + "]").attr("disabled","disabled");
    });
});