jquery - 使用代表每个类的复选框切换具有多个类的多个部门的可见性

标签 jquery html css

我是第一次在这里发帖,我不是太有经验......

有很多类似的问题询问如何根据复选框选择器显示/隐藏 div;让我感到困惑的是,我有多个类的 div,如果选中了这些类中的任何一个相关复选框,我希望显示 div。

例如,假设我想要一个页面来显示与为一系列 Actor 选择的复选框相对应的所有电影。多个 Actor 可以在一部电影中出现,我希望所有电影都能放映,前提是至少要选择一个 Actor 。到目前为止,我的方法是:

  1. 将每部电影放在一个单独的 div 中
  2. 将 Actor 姓名作为类添加到每个电影 div
  3. 为每个 Actor 创建一个复选框,其值与相应的 div 类相匹配:
  4. 设置每个div类不显示
  5. 使用 JQuery 显示仍然隐藏的 div

最初我尝试使用 toggle() 来实现这一点,但我遇到了显示问题:如果选择了同一部电影中的两个 Actor ,则状态反转。

接下来我只是尝试编码:

if ($("." + inputValue).is(':hidden')){
$("." + inputValue).show()};

为了克服选中一个复选框然后取消选中它但电影仍然存在的问题,我添加了一个 else 语句来隐藏该元素(如果它已经在显示)..但现在我遇到了与切换时相同的问题()

我添加了下面的代码 - 如果您选择 Brad Pitt 或 Angelina Jolie,您将看到“Mr and Mrs Smith”显示。问题是,如果您随后选择其他男 Actor /女 Actor ,它将再次消失。我可能错了,但似乎更改 div 类的显示属性会更改附加到该 div 的所有其他类的属性(这是有道理的,因为这可以避免冲突)

这里唯一的解决方法是为每部电影设置一个 ID 并检查电影是否已经放映了吗? (我有很多电影,但 Actor 不多,所以这会导致更多的 CSS 代码)

.BradPitt {
  display: none
}

.AngelinaJolie {
  display: none
  }
<div>
<label><input type="checkbox" name="actorCheckbox" value="BradPitt"> Brad Pitt </label>
<label><input type="checkbox" name="actorCheckbox" value="AngelinaJolie"> Angelina Jolie </label>
</div>

<div class = "BradPitt AngelinaJolie">Mr and Mrs Smith</div>



<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"> </script>
<script>
$(document).ready(function(){

  var showElements = function() {

        var inputValue = $(this).attr("value");
        
        if ($("." + inputValue).is(':hidden')){
        $("." + inputValue).show()
      }else{
        $("." + inputValue).hide()
        };


  }

  $( "input[type=checkbox]" ).on( "click", showElements );  
});
</script>

最佳答案

为了让它工作,我建议做一些小的改变:

$(document).ready(function() {
  var showElements = function() {
    var inputValue = []
    $("input[type=checkbox]:checked").each(function() {
      inputValue.push($(this).val())
    })
    $('.movie').hide();
    $('.movie').filter(function() {
      for (var i = 0; i < inputValue.length; i++) {
        if ($(this).hasClass(inputValue[i])) {
          return $(this)
        }
      }
    }).show();
  }
  $("input[type=checkbox]").on("click", showElements);
});

我还添加了类 movie<div class = "BradPitt AngelinaJolie">Mr and Mrs Smith</div>

演示

$(document).ready(function() {
  var showElements = function() {
    var inputValue = []
    $("input[type=checkbox]:checked").each(function() {
      inputValue.push($(this).val())
    })
    $('.movie').hide();
    $('.movie').filter(function() {
      for (var i = 0; i < inputValue.length; i++) {
        if ($(this).hasClass(inputValue[i])) {
          return $(this)
        }
      }
    }).show();
  }
  $("input[type=checkbox]").on("click", showElements);
});
.BradPitt {
  display: none
}

.AngelinaJolie {
  display: none
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <label><input type="checkbox" name="actorCheckbox" value="BradPitt"> Brad Pitt </label>
  <label><input type="checkbox" name="actorCheckbox" value="AngelinaJolie"> Angelina Jolie </label>
</div>

<div class="movie BradPitt AngelinaJolie">Mr and Mrs Smith</div>
<div class="movie BradPitt">Troy</div>

关于jquery - 使用代表每个类的复选框切换具有多个类的多个部门的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283260/

相关文章:

javascript - 如何使用 jquery 获取嵌套列表值

javascript - 显示/隐藏菜单子(monad)链接的内容并在单击下一个新链接时关闭内容

jquery - 自动扩展输入框,不干扰其他 block

css - 另一种用于 flex 多列布局的非脚本解决方案,背景颜色扩展了整个滚动高度

css - 我应该如何使用 index.html?

html - 如何处理表格中的 `rowspan` 和背景颜色?

javascript - 仅当下拉菜单在 AngularJs 中具有值时才需要下拉菜单

javascript - Kendo UI 模态视图中的引用对象属性

html - 使用 Latex 和 HTML 渲染在 R Markdown 中标记矩阵的行和列

html - 提交按钮不会与同一行的其他字段垂直对齐