【问题标题】:jQuery disable sibling option in select menujQuery在选择菜单中禁用兄弟选项
【发布时间】:2015-07-10 08:02:45
【问题描述】:

我在同一页面上有 2 个选择菜单,它们有一些相同的选项。如果该选项与第一个选择菜单的选定选项相同,我需要能够从第二个选择菜单中禁用该选项。

<select class="option1">
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>

<select class="option2">
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>

因此,如果在 option1 上选择了“A”,我需要在 option2 上禁用“A”。我尝试了很多东西都无济于事。我尝试使用兄弟姐妹,我所能做的就是禁用整个选择菜单而不是特定选项。有什么想法吗?

【问题讨论】:

  • 而且真的是单选列表,而不是多选列表?
  • 是的,它是一个单选列表。
  • 您忘记发布您尝试过的 jQuery。另外,如果有人先从第二个列表中进行选择,会发生什么?
  • 如果你可以的话,你可以使用 jquery 删除那个特定的选项。
  • 这里你去stackoverflow.com/questions/2155909/…禁用一个选项。

标签: jquery


【解决方案1】:

这里有一些东西给你(参见代码中的 cmets 以了解它是如何工作的):

// Let's react to option1 changing
$('select.option1').change(function() {
  // Get the selected text value from option1
  var selectedValue = $('option:selected', this).text();
  // Disable option2's options based on the text value
  $('select.option2 option').prop('disabled', function() {
    return $(this).text() == selectedValue;
  });
  
  // Missing from this:
  // If option2's selection is no longer enabled, set it to the first
  // non-disabled option instead
  
}).change(); // fire the change event to handle the initial selection
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select class="option1">
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>

<select class="option2">
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>

【讨论】:

  • 成功了!正是我想要完成的。谢谢!
【解决方案2】:

如果您的选项没有价值,您可以通过您的内容找到它

你可以这样做:

HTML

<select name="" id="s1">
    <option value="">01</option>
    <option value="">02</option>
    <option value="">03</option>
    <option value="">04</option>
    <option value="">05</option>
  </select>


  <select name="" id="s2">
    <option value="">01</option>
    <option value="">02</option>
    <option value="">03</option>
    <option value="">04</option>
    <option value="">05</option>
  </select>

jQuery

$("#s1").change(function() {
  $("#s2 option").prop("disabled", false);

  var option = $(this).find("option:selected").html();
  $("#s2 option:contains('" + option + "')").prop("disabled", true);
});

Look result in JSBin

【讨论】:

  • 也是一个不错的选择并且效果很好。非常感谢!
  • 由于:contains().html() 的使用,我投了反对票。如果每个选择列表的选项值为"0101",并且用户在s1 中选择了"01",则"01""0101" 都将在第二个列表中被禁用。其次,&lt;option&gt; 元素通常没有 HTML 值或文本。
猜你喜欢
  • 2011-11-07
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 2017-05-20
相关资源
最近更新 更多