jquery 如何从下拉菜单中取消隐藏小于或等于某个值的元素?

qlvxas9a  于 2023-08-04  发布在  jQuery
关注(0)|答案(2)|浏览(95)

在下面的代码片段中,有一个值为1 - 4的下拉菜单。当选择一个值时,相应数量的文本框通过显示隐藏的分割“出现”。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script>
  $(document).ready(function() {
    $("#elementreg").on("change", function() {
      var val = $(this).val();

      $('.types').hide(); //hide all
      $(`#${val}`).show(); //show by matching the selected value
    });
  });
</script>

<label for="How Many Chips">How Many Chips?:</label>

<select class="medium" id="elementreg" name="amount">
  <option value="" selected="selected"></option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
</select>

<div class="types" id="1">
  <input name="First Chip ID">
</div>

<div class="types" id="2">
  <input name="First Chip ID">
  <input name="Second Chip ID">
</div>

<div class="types" id="3">
  <input name="First Chip ID">
  <input name="Second Chip ID">
  <input name="Third Chip ID">
</div>

<div class="types" id="4">
  <input name="First Chip ID">
  <input name="Second Chip ID">
  <input name="Third Chip ID">
  <input name="Fourth Chip ID">
</div>

字符串
在这种情况下,代码根据所选的值显示相应的div,而其他div保持隐藏。我想这样,当一个值是从下拉菜单中选择,所有小于或等于所选的值成为显示div。例如,如果我选择值3,则显示id=1的div、id=2的div和id=3的div。
为此,我尝试更改以下行:

$(`#${val}`).show(); //show by matching the selected value


变成这样:

$(`div[id <= ${val}]`).show(); //show all divs less than or equal to val


然而,这仅仅是破坏了该特征。我可以得到帮助或建议,我应该如何处理这个功能?

e0uiprwp

e0uiprwp1#

要实现显示所有小于或等于下拉菜单中所选值的div的预期行为,需要相应地修改JavaScript代码。您可以使用一个循环遍历所有div并检查它们的ID,以确定是否应该显示或隐藏它们,而不是通过它们的ID显示/隐藏单个div。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script>
  $(document).ready(function() {
    $("#elementreg").on("change", function() {
      var val = $(this).val();

      // Hide all divs first
      $('.types').hide();

      // Show divs less than or equal to the selected value
      for (var i = 1; i <= val; i++) {
        $(`#${i}`).show();
      }
    });
  });
</script>

字符串
当你从下拉列表中选择一个值时,所有ID小于或等于所选值的div都会显示出来,而其他div则保持隐藏状态。该循环从1开始到选定的值,对于每次迭代,它都显示具有相应ID的div。

s1ag04yj

s1ag04yj2#

您可以使用:lt()选择器来实现这一点。在你目前的结构中,你有所有div的公共类,即:types所以use可以添加一行$(.types:lt(${val})).show(),这将选择所有小于给定值的div并显示它们。

  • 演示代码 *:
$(document).ready(function() {
  $("#elementreg").on("change", function() {
    var val = $(this).val();
    $('.types').hide(); //hide all
    $(`.types:lt(${val})`).show(); //show div where class index - < value frm dropdown choosen 
  });
});
.types {
  display: none;
  border: 1px solid black;
  padding: 5px;
  margin: 2px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<label for="How Many Chips">How Many Chips?:</label>

<select class="medium" id="elementreg" name="amount">
  <option value="" selected="selected"></option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
</select>

<div class="types" id="1">
  <input name="First Chip ID">
</div>

<div class="types" id="2">
  <input name="First Chip ID">
  <input name="Second Chip ID">
</div>

<div class="types" id="3">
  <input name="First Chip ID">
  <input name="Second Chip ID">
  <input name="Third Chip ID">
</div>

<div class="types" id="4">
  <input name="First Chip ID">
  <input name="Second Chip ID">
  <input name="Third Chip ID">
  <input name="Fourth Chip ID">
</div>

相关问题