使用选中的输入显示具有数据attr对象的元素

时间:2016-07-28 20:08:08

标签: javascript jquery html

enter image description here

上面是复选框列表,简单的开始吧。其中两个被检查。我接下来有一个面板列表,我想隐藏或显示,这取决于面板数据attr数组称为数据类别是否包含HR或客户服务。

数据数组的一个例子:

["Legal and Regulatory","Marketing","HR","Cusomer Service"]

问题:

我检查下面的JS似乎显示的元素是最后一个选中的复选框。例如,如果我点击了#34; HR"最后,这将显示" HR"而不是"客户服务"太

所以我想要的是显示数据attr包括"客户服务"和" HR"。但是,如果数据attr没有例如" Sales"但确实有"客户服务"和" HR"和"销售"被检查了。它将被隐藏。

$('.checkbox').on('change', function() {
  $('.pagination, .callout').hide();

  $('.checkbox:checked').each(function() {
    var checkboxName = $(this).val();

    $('.callout').hide().each(function() {
      var calloutArray = $(this).data();

      if (calloutArray.category.indexOf(checkboxName) !== -1) {
        $(this).show();
      }
    });
  });

  var countChecked = $('.checkbox').filter(':checked').length;

  if (countChecked === 0) {
    $('.callout').show();
    $('.pagination').show();

    pagination();
  }

});

总结一下,基本上如果数据attr不包含已检查的输入,则隐藏,否则如果所有选中的复选框都存在则显示该面板。

我希望我已解释过这一点。请留下评论以获取所需的进一步信息。

****编辑*****

复选框HTML:

<ul class="category-filters">
    <li>
        <label><input class="checkbox" value="Customer Service" type="checkbox">Customer Service</label>
    </li>
    <li>
        <label><input class="checkbox" value="Finance" type="checkbox">Finance</label>
    </li>
    <li>
        <label><input class="checkbox" value="HR" type="checkbox">HR</label>
    </li>
    <li>
        <label><input class="checkbox" value="Legal and Regulatory" type="checkbox">Legal and Regulatory</label>
    </li>
    <li>
        <label><input class="checkbox" value="Marketing" type="checkbox">Marketing</label>
    </li>
    <li>
        <label><input class="checkbox" value="Operations" type="checkbox">Operations</label>
    </li>
    <li>
        <label><input class="checkbox" value="Risk Management" type="checkbox">Risk Management</label>
    </li>
    <li>
        <label><input class="checkbox" value="Sales" type="checkbox">Sales</label>
    </li>
    <li>
        <label><input class="checkbox" value="Technology" type="checkbox">Technology</label>
    </li>           
</ul>

这些是小组:

<div style="display: none;" class="callout horizontal word-wrap" data-category="[&quot;Customer Service&quot;,&quot;HR&quot;,&quot;Operations&quot;,&quot;Risk Management&quot;,&quot;Technology&quot;]">

    <img src="http://localhost/vallum/wp-content/uploads/2016/07/David-King.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="David-King" srcset="http://localhost/vallum/wp-content/uploads/2016/07/David-King.jpg 480w, http://localhost/vallum/wp-content/uploads/2016/07/David-King-277x300.jpg 277w" sizes="(max-width: 639px) 98vw, (max-width: 1199px) 64vw, 480px">
    <h5>David King</h5>
    <p>With over 19 year’s experience of working</p>

</div>

1 个答案:

答案 0 :(得分:1)

您的问题是您正在循环复选框并隐藏每个复选框迭代的所有面板,这将撤消上一个复选框迭代的工作。

$('.callout').hide().each(function() {

是你的问题。在循环复选框之前,您已经隐藏了所有面板,因此只需删除隐藏:

$('.callout').each(function() {