选择中删除选项

时间:2012-06-17 13:17:37

标签: javascript jquery html

<select class="one">
    <option></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>
<br />
<select class="one">
    <option></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>
<br />
<select class="one">
    <option></option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

$(".one").change(function(){

})

我想做 - 例如,如果我选择第一个位置选项1然后我其他选择此选项应该被删除。 因此,如果我在第一次选择i选择1然后在选择第二和第三,我只有选项2和3.如果在第二选择我选择2然后在最后选择我只有选项3.

我怎么做到的?我想使用jQuery。

现场:http://jsfiddle.net/9N9Tz/1/

4 个答案:

答案 0 :(得分:5)

如果您需要对某些内容进行排序,请考虑使用jQuery UI sortable这样的内容,因为一系列下拉菜单会导致用户体验非常糟糕。

但要回答你的问题:

var $selects = $('.one');
$selects.on("keyup click change", function(e) {
  $selects.not(this).trigger('updateselection');
}).on("updateselection", function(e, data) {
  var $this = $(this);
  $this.children().show();
  $selects.not(this).each(function() {
    var value = $(this).val();
    if (value) {
      $this.children('[value="' + value + '"]').hide();
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="one">
  <option></option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>
<br />
<select class="one">
  <option></option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>
<br />
<select class="one">
  <option></option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>

隐藏选项适用于当前的Firefox。我不确定遗留浏览器。隐藏(但不删除)元素可确保您可以在不损坏输入元素的情况下更改选择。

答案 1 :(得分:3)

在这里你http://jsfiddle.net/Calou/9N9Tz/6/

<select>的值发生变化时,只需获取此值并在其他<option>中搜索具有此值的<select>并删除它们。

$(".one").change(function(){
    var val = this.value
    if (val !== '') {
        $(this).siblings().find('option[value=' + val + ']').remove()
    }
})

答案 2 :(得分:1)

如果你对第二和第三选择元素

使用不同的类,那将很容易
$(".one").change(function(){
    var val = parseInt($(this).val());
    $('.two,.three').find('option:contains('+val+')').remove();  
});  

编辑:
更新了代码以申请多项选择。 [感谢所有评论员和Alex让它注意到]

  $(".one").change(function(){
        var val = parseInt($(this).val());
        $(this).siblings().find('option:contains('+val+')').remove();  
    });  

答案 3 :(得分:1)

// As soon as all selects have one class, you'll have to distinguish them:
$(".one").each(function() { 
    // Now this corresponds to one select (in the loop over all)
    $(this).change(function() {
       // Fix what've done before
       $('option').show();
       // Find every other select, find an option in it
       // that has the same value that is selected in current select
       // (sorry for the description)
       $('.one').not(this).find('option[value=' + $(this).find('option:selected').val() +']').hide();
    });
})​;​

jsFiddle