javascript - Filter by checkbox show/hide target divs jquery -
i'm having trouble targetting divs need show/hide when jquery runs.
i need hide <div class="grid-cell>
otherwise flexbox won't display correctly once div's hidden.
i'm having trouble getting hit correct divs , it's not working after changing code bit.
https://jsfiddle.net/s1e93j92/6/
<input type="checkbox" class="checkbox" name="high" data-category-type="high">high <input type="checkbox" class="checkbox" name="low" data-category-type="low" > low <input type="checkbox" class="checkbox" name="low" data-category-name="bread" > bread <div class="wrap"> <div class="grid grid--flexcells grid--gutters grid--1of2"> <div class="grid-cell"> <div class="box"> <div id="categories" data-category-type="high" data-category-name="low"> <a href="#"> <div class="image"><img src="#"></div> </a> </div> </div> </div> <div class="grid-cell"> <div class="box"> <div id="categories" data-category-type="high" data-category-name="bread"> <a href="#"> <div class="image"><img src="#"></div> </a> </div> </div> </div> <div class="grid-cell"> <div class="box"> <div id="categories" data-category-type="high" data-category-name="low"> <a href="#"> <div class="image"><img src="#"></div> </a> </div> </div> </div> <div class="grid-cell"> <div class="box"> <div id="categories" data-category-type="low" data-category-name="bread"> <a href="#"> <div class="image"><img src="#"></div> </a> </div> </div> </div> </div>
.wrap{width:80%; height:200px; border:1px solid #ccc;} .grid { display: flex; flex-wrap: wrap; list-style: none; margin: 0; padding: 0; } .grid--1of2 > .grid-cell { flex: 0 0 50%; } .image{width:100%; height:100px; border:1px solid #ff00ff} $('.checkbox ').on('click', function (e) { var $this = $(this), $links = $('.checkbox'); if ($this.hasclass('selected')) { $this.removeclass('selected'); } else { $this.addclass('selected'); } var selecteddivs = $('.box > categories > > div').hide(); var anyselectedcheckbox = false; $.each($links, function (k, v) { $this = $(v); if ($this.hasclass('selected')) { anyselectedcheckbox = true; var cat = $this.data('categorytype'); var nam = $this.data('categoryname'); selecteddivs = selecteddivs.filter('[data-category-type="'+cat+'"], [data-category-name="'+nam+'"]'); } }); selecteddivs.show(); if(!anyselectedcheckbox) { $('.box > div').show(); } });
as comment suggests, it's not clear you're trying do, think got it. didn't make changes html or css. modified javascript little.
$('.checkbox').on('click', function (e) { var $this = $(this), $links = $('.checkbox'); if ($this.hasclass('selected')) { $this.removeclass('selected'); } else { $this.addclass('selected'); } $('.box').hide(); if ($(".checkbox:checked").length > 0) { // 1 checked $.each($links, function (k, v) { $this = $(v); if ($this.hasclass('selected')) { anyselectedcheckbox = true; var cat = $this.data('categorytype'); var nam = $this.data('categoryname'); $('.box:has(div[data-category-type="' + cat + '"],div[data-category-name="+nam+"] )').show(); } }); } else { // none checked $('.box').show(); } });
Comments
Post a Comment