0

我有 4 个select具有相同选项的输入。我正在尝试禁用从这些选择之一中选择的任何选项。

<select name="homeTeams[]" onchange="check()">
    <option value="1">Team1</option>
    <option value="2">Team2</option>
    <option value="3">Team3</option>
    <option value="4">Team4</option>
</select>

<select name="homeTeams[]" onchange="check()">
    <option value="1">Team1</option>
    <option value="2">Team2</option>
    <option value="3">Team3</option>
    <option value="4">Team4</option>
</select>


<select name="awayTeams[]" onchange="check()">
    <option value="1">Team1</option>
    <option value="2">Team2</option>
    <option value="3">Team3</option>
    <option value="4">Team4</option>
</select>

<select name="awayTeams[]" onchange="check()">
    <option value="1">Team1</option>
    <option value="2">Team2</option>
    <option value="3">Team3</option>
    <option value="4">Team4</option>
</select>

我正在尝试禁用从这些选择器之一中选择的选项。我正在使用 jQuery 来执行此操作,但我无法根据发件人获取值。

例如:如果用户从 Select 1 中选择了 Team1,则jQuery代码将禁用 Select2 和 Select3 和 Select4 中的选项 Team1。

  function check()
  {
      var a = $('select option:selected').val();
      alert(a);
  }

它给了我第一个选择的价值。

有任何想法吗 ?

4

2 回答 2

1

这是我的解决方案 - 请注意“- select -”的“0”值,它允许取消选择任何值:

$('select').on('change', function() {
    var vals = {};
    $('select').each(function(i, el) {
        vals[el.value] = 1;
    });
    delete vals[0];

    $('option').prop('disabled', function() {
        return this.value in vals && this.value !== this.parentElement.value;
    });
});​

演示在http://jsfiddle.net/alnitak/Qq33g/

于 2012-11-18T22:57:37.440 回答
0

使用 jQuery 注册事件处理程序,如下所示:

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

这可能有效。我没有测试过。

于 2012-11-18T22:37:48.397 回答