【问题标题】:Select2 hide options with jquerySelect2 使用 jquery 隐藏选项
【发布时间】:2020-03-09 12:11:45
【问题描述】:

我需要在一个选择下拉菜单上显示/隐藏选项,这取决于另一个选择下拉选项。

我的代码:

$(document).ready(function() {
   $("#layout_select").select2();
   $("#column_select").select2();

   $("#layout_select").children('option:gt(0)').hide();
   $("#column_select").change(function() {
      $("#layout_select").children('option').hide();
      $("#layout_select").children("option[value^=" + $(this).val() + "]").show()
   })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.0.12/dist/js/select2.min.js"></script>

<link href="https://cdn.jsdelivr.net/npm/select2@4.0.12/dist/css/select2.min.css" rel="stylesheet" />


<select name="column_select" id="column_select">
   <option value="col1">1 column</option>
   <option value="col2">2 column</option>
   <option value="col3">3 column</option>
</select>

<select name="layout_select" id="layout_select">
  <option value="col1">none</option>

  <option value="col2_ms">layout 1</option> 
  <option value="col2_sm">layout 2</option>

  <option value="col3_mss">layout 3</option>
  <option value="col3_ssm">layout 4</option>
  <option value="col3_sms">layout 5</option>
 </select>

当我更改第一个“column_select”的选择时,我想使用隐藏/显示更改我的“layout_select”选项

类似this StackOverflow issue

注意:我使用的是 Select2。

在我的实现中,我完全按照示例进行操作,但是由于我使用的是 select2 脚本,所以它不起作用。

知道我在使用 select2 的情况下,有人知道如何做同样的事情吗?不使用 .remove() 和 .append(),但与给出隐藏/显示的示例完全相同。

【问题讨论】:

  • 隐藏选项后是否再次尝试调用$("#layout_select").select2();
  • 不,不幸的是,即使$("#layout_select").children('option').hide(); 也没有任何效果。怎么再打电话?
  • 也许您可以检查this answer 并添加禁用属性而不是隐藏您的选项。

标签: javascript jquery select jquery-select2


【解决方案1】:

按照this answer 中的建议,您可以禁用选项而不是隐藏它们,并根据需要使用 CSS 隐藏选项(否则它们将显示为灰色)。

您必须在change 事件结束时调用$("#layout_select").select2(); 并调用$("#column_select").change(); 以在页面加载时触发更改事件。

$(document).ready(function() {
   $("#layout_select").select2();
   $("#column_select").select2();

   $("#layout_select").children('option:gt(0)').hide();
   $("#column_select").change(function() {
      $("#layout_select").children('option').prop('disabled', true);
      $("#layout_select").children("option[value^=" + $(this).val() + "]").prop('disabled', false);
      $("#layout_select").select2();
   })
   $("#column_select").change();
});
.select2-container--default .select2-results__option[aria-disabled=true] {
    display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.0.12/dist/js/select2.min.js"></script>

<link href="https://cdn.jsdelivr.net/npm/select2@4.0.12/dist/css/select2.min.css" rel="stylesheet" />


<select name="column_select" id="column_select">
   <option value="col1">1 column</option>
   <option value="col2">2 column</option>
   <option value="col3">3 column</option>
</select>

<select name="layout_select" id="layout_select">
  <option value="col1">none</option>

  <option value="col2_ms">layout 1</option> 
  <option value="col2_sm">layout 2</option>

  <option value="col3_mss">layout 3</option>
  <option value="col3_ssm">layout 4</option>
  <option value="col3_sms">layout 5</option>
 </select>

【讨论】:

  • 非常感谢,这解决了我的问题。拯救了我的一天。
  • @mik_assad 你可以accept这个答案然后;)
猜你喜欢
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 2019-12-18
  • 2017-06-02
  • 2014-09-23
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
相关资源
最近更新 更多