【问题标题】:jQuery toggle div with <select> field带有 <select> 字段的 jQuery 切换 div
【发布时间】:2019-06-13 02:20:43
【问题描述】:

我已经尝试了大约一个小时来让这段代码工作,但这只是在黑暗的地方很痛苦。

好的,让我们切入正题。我正在尝试创建一个选择字段,根据&lt;select&gt; 的状态切换不同的 HTML 元素

$(document).ready(function() {
  $('#mySelect').change(function() {
    let item1 = $("#item1");
    let item2 = $("#item2");
    let item3 = $("#item3");

    switch ($('select[name=mySelect]').val()) {
      case 1:
        item1.show();
        item2.hide();
        item3.hide();
        break;
      case 2:
        item1.hide();
        item2.show();
        item3.hide();
        break;
      case 3:
        item1.hide();
        item2.hide();
        item3.show();
        break;
      default:
        item1.hide();
        item2.hide();
        item3.hide();
        break;
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="mySelect" name="mySelect">
  <option value="0" disabled selected>-- Select your item--</option>
  <option value="1">item1</option>
  <option value="2">item2</option>
  <option value="3">item3</option>
</select>

<div id='item1'>
  <p> contents
</div>

<div id='item2'>
  <p> text2</p>
</div>

<div id='item3'>
  <p> text3</p>
</div>

【问题讨论】:

  • 什么是#selectRange
  • 是的,我注意到了。我忘记在我的代码中更改选择字段的 ID。现在已经修复了:D
  • 谢谢。我在下面为你添加了答案。

标签: jquery switch-statement


【解决方案1】:

您当前逻辑的问题是您从val() 检索字符串并将其与switch 中的int 进行比较,因此default 块总是在比较失败时执行。将比较修复为字符串,或将 val() 转换为 int。

$(document).ready(function() {
  $('#mySelect').change(function() {
    let item1 = $("#item1");
    let item2 = $("#item2");
    let item3 = $("#item3");

    switch ($('select[name=mySelect]').val()) {
      case '1':
        item1.show();
        item2.hide();
        item3.hide();
        break;
      case '2':
        item1.hide();
        item2.show();
        item3.hide();
        break;
      case '3':
        item1.hide();
        item2.hide();
        item3.show();
        break;
      default:
        item1.hide();
        item2.hide();
        item3.hide();
        break;
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="mySelect" name="mySelect">
  <option value="0" disabled selected>-- Select your item--</option>
  <option value="1">item1</option>
  <option value="2">item2</option>
  <option value="3">item3</option>
</select>

<div id='item1'>
  <p> contents
</div>

<div id='item2'>
  <p> text2</p>
</div>

<div id='item3'>
  <p> text3</p>
</div>

但是,您可以通过在所有div 元素上放置一个公共类来以更简单的方式实现您的目标,这样您就可以在选择更改时轻松隐藏它们。然后您可以通过连接选定的值来构建 id 选择器字符串,如下所示:

$(document).ready(function() {
  $('#mySelect').change(function() {
    $('.item').hide();
    $('#item' + $(this).val()).show();
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="mySelect" name="mySelect">
  <option value="0" disabled selected>-- Select your item--</option>
  <option value="1">item1</option>
  <option value="2">item2</option>
  <option value="3">item3</option>
</select>

<div class="item" id="item1">
  <p>contents</p>
</div>

<div class="item" id="item2">
  <p>text2</p>
</div>

<div class="item" id="item3">
  <p>text3</p>
</div>

请注意,您将无法选择已禁用的 option 元素,因此无需像您的 default 块尝试那样再次显示所有 .item 元素。

【讨论】:

  • 没问题,很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 2012-06-29
相关资源
最近更新 更多