禁用下拉菜单

时间:2014-09-10 04:43:49

标签: javascript jquery html drop-down-menu

我有十个下拉菜单

<select id="dropdownmenu1">
<option value="1">One</option>
<option value="2">Two</option>
</select>
<select id="dropdownmenu2">
<option value="1">One</option>
<option value="2">Two</option>
</select>
等等... 我的要求是,如果用户从任何下拉列表中选择任何选项,则必须在所有下拉列表中禁用该选项。 例如,如果用户从dropdownmenu3中选择Two,则在所有下拉列表中必须禁用选项Two。我如何在jquery中实现这一点?

5 个答案:

答案 0 :(得分:3)

是的我同意@AbdulJabbar,现在为每个下拉列表添加一个额外的选项,你的html看起来如下所示:

<select id="dropdownmenu1">
<option value="0">Select</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>

<select id="dropdownmenu2">
<option value="0">Select</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>

试试这个:

$('select').change(function(){
   var drop = $(this).val();
    $('select option').each(function(){
       if($(this).val() == drop && drop != "0")
       {
         $(this).attr('disabled','disabled')
       }
       else
       {
         $(this).removeAttr('disabled')
       }
    });
});

编辑: -

DEMO

注意: - 在此答案中,您可以根据自己的要求使用或保留else语句(在Jquery代码中)。

答案 1 :(得分:1)

这是Short and Sweet的答案,

<select id="dropdownmenu1">
    <option value="0">Select</option>
    <option value="1">One</option>
    <option value="2">Two</option>
</select>
<select id="dropdownmenu2">
    <option value="0">Select</option>
    <option value="1">One</option>
    <option value="2">Two</option>
</select>
<select id="dropdownmenu3">
    <option value="0">Select</option>
    <option value="1">One</option>
    <option value="2">Two</option>
</select>
<select id="dropdownmenu4">
    <option value="0">Select</option>
    <option value="1">One</option>
    <option value="2">Two</option>
</select>

jQuery代码,

$('select').change(function () {
    if ($(this).find("option:selected").val() != "0") {
        var selected = $(this).find("option:selected").text();
        $('select option:contains("' + selected + '")').attr('disabled', 'disabled');
    }
});

Demo

答案 2 :(得分:0)

最终编辑

我在代码中添加了一些注释 Here is a totally functional DEMO

我认为它完全符合您的要求。当我们更新一个值时,它将在其他选择中禁用它,并且因为已经选择而必须禁用的选项将保持(或实际重新设置)禁用。

以下是相关的JS代码:

    // all the select but no current
    $selects.not($this).
        // get the options with the value of the current one
        // we ignore the value="null" bc that's "select an option"
        find('option[value='+value+']:not([value=null])').
        // disabling them
        prop('disabled','disabled');

我认为这就是你所需要的:)



以前的答案

编辑2: 还是很简单,还有一些问题要解决,即我们应该遍历所有选择以检查以太,我们应该禁用或不禁用值。如果你想让我告诉你如何,请在评论中提问。 Here is a working JSFiddle

var $selects = $('select')

$selects.change(function() {
    var $self = $(this);
    var value = $self.val();
    $selects.find('option:not([value='+value+'])').removeAttr('disabled');
    $selects.not($self).find('option[value='+value+']').prop('disabled','disabled');
});

每次选择更改时,您都会获得所选选项,并在其他选项中将其设置为禁用。

var $selects = $('select')

$selects.change(function() {
    var value = $(this).val();
    $selects.find('option[value='+value+']').prop('disabled', 'disabled')
});

修改:错误已修复且the working JSFiddle

答案 3 :(得分:0)

@ Kartikeya的解决方案运行良好,但您需要对选项进行轻微更改并在开始时添加一个空选项,因为事件侦听器正在侦听事件更改并且所有选项都设置为1,因此最初它只适用于选择“两个”的情况。我不是说它不对,但你应该尝试添加一个空选项,以便当用户在开始时选择一个时它也可以工作。就像:

<select id="dropdownmenu1">
    <option value="0"></option>
    <option value="1">One</option>
    <option value="2">Two</option>
</select>

See the full demo here ,使用@ kartikeya的逻辑工作正常。

答案 4 :(得分:0)

这是。

DEMO: http://jsfiddle.net/don/0t1sm71z/

一步一步:

  1. 获取所选值。
  2. 使用each()检查是否有任何选项具有相同的值。
  3. 使用hide()attr('disabled', 'disabled')隐藏值。并使用show()removeAttr('disabled')显示其他值。
  4. 检查演示: http://jsfiddle.net/don/0t1sm71z/


    准备HTML:

    <select id="dropdownmenu1" class="dropdown">
        <option value="" selected="selected">Choose</option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </select>
    <select id="dropdownmenu2" class="dropdown">
        <option value="" selected="selected">Choose</option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </select>
    

    准备好jQuery / Javascript:

    $(document).ready(function() {
        $('.dropdown').change(function() {
            // Get the current value
            var selectedOption = $(this).val();
    
            // Check if any option has the same value        
            $('.dropdown option').each(function(){
                if($(this).val() == selectedOption && $(this).is(':selected') != true) {
                    // If yes, hide this option
                    $(this).hide();
                } else {
                    // If not, show the option
                    $(this).show();
                }
            });
        });
    });