2017-01-10 4 views
0

Я работаю над проектом для фильтрации div с использованием checkboxes, и до сих пор у меня он работает, но мне не хватает одного куска головоломки.jQuery - фильтрация div с помощью checkbox issue

Когда вы делаете выбор, например Slider, он покажет единственный вариант с Slider.

Если вы выберите Full Width он покажет все варианты с SliderиFull Width

Что я хочу это только варианты шоу с какSlider и Full Width так что вы бы не получить результат с Fader и Full Width

Надеюсь, что это имеет смысл

$(document).ready(function() { 
 

 
    var sections = $('.sectionContent'); 
 

 
    function updateContentVisibility() { 
 
    var checked = $("#filterControls :checkbox:checked"); 
 
    if (checked.length) { 
 
     sections.hide(); 
 
     checked.each(function() { 
 
     $("." + $(this).val()).show(); 
 
     }); 
 
    } else { 
 
     sections.show(); 
 
    } 
 
    } 
 

 
    $("#filterControls :checkbox").click(updateContentVisibility); 
 
    updateContentVisibility(); 
 

 
});
#filterControls label { 
 
    display: block; 
 
} 
 
.box { 
 
    height: 100px; 
 
    background: #eee; 
 
    width: 300px; 
 
    text-align: center; 
 
    line-height: 100px; 
 
    margin: 5px; 
 
    display: inline-block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<div id="filterControls"> 
 
    <label><b>Image Header Type</b> 
 
    </label> 
 
    <label> 
 
    <input type="checkbox" value="Slider" name="SliderCheck" />Slider</label> 
 
    <label> 
 
    <input type="checkbox" value="Fader" name="FaderCheck" />Fader</label> 
 
    <label> 
 
    <input type="checkbox" value="Static" name="StaticCheck" />Static</label> 
 
    <label><b>Image Header Styles</b> 
 
    </label> 
 
    <label> 
 
    <input type="checkbox" value="Full-Width" name="SliderCheck" />Full Width</label> 
 
    <label> 
 
    <input type="checkbox" value="Full-Screen" name="FaderCheck" />Full Screen</label> 
 
    <label> 
 
    <input type="checkbox" value="Arrow-Navigation" name="CustomCheck" />Arrow Navigation</label> 
 
</div> 
 

 
<div id="siteFilter"> 
 
    <div class="sectionContent box Slider Full-Width Full-Screen Arrow-Navigation" style="display: inline-block;"> 
 
    <a href="http://www.twelve.com.au/" target="_blank">Slider/Full Width</a> 
 
    </div> 
 
    <div class="sectionContent box Fader Full-Width Arrow-Navigation" style="display: inline-block;"> 
 
    <a href="http://www.galpins.com.au/" target="_blank">Fader/Full Width</a> 
 
    </div> 
 
    <div class="sectionContent box Static Full-Width" style="display: inline-block;"> 
 
    <a href="http://www.wmcaccounting.com.au/" target="_blank">Static/Full Width</a> 
 
    </div> 
 
</div>

+0

Возможно, мне это не хватает, но где вы итерируете все флажки и скрываете их, как только новые проверены? – bos570

+0

Если вы проверите что-то, он найдет элемент с соответствующим классом, если вы проверите две вещи. Он найдет элементы с соответствующими классами, что я хочу. Если вы проверите две или три вещи, я хочу, чтобы результат отображал элемент со всеми этих классов. Это лучше? – webmonkey237

+0

Что значит if (checked.length)? –

ответ

3

Для того, чтобы выбрать конкретный элемент, который имеет два класса, нужно, чтобы объединить все классы, разделяя их . s без пробелов как .class1.class2.class3, делать, что вам нужно обновить ваша updateContentVisibility логика, проверить это:

$(document).ready(function() { 
 

 
    var sections = $('.sectionContent'); 
 

 
    function updateContentVisibility() { 
 
    var checked = $("#filterControls :checkbox:checked"); 
 
    if (checked.length) { 
 
     sections.hide(); 
 
     var selectedClasses = ""; 
 
     checked.each(function() { 
 
     selectedClasses += "." + $(this).val(); 
 

 
     }); 
 
     $(selectedClasses).show(); 
 
    } else { 
 
     sections.show(); 
 
    } 
 
    } 
 

 
    $("#filterControls :checkbox").click(updateContentVisibility); 
 
    updateContentVisibility(); 
 

 
});
#filterControls label { 
 
    display: block; 
 
} 
 
.box { 
 
    height: 100px; 
 
    background: #eee; 
 
    width: 300px; 
 
    text-align: center; 
 
    line-height: 100px; 
 
    margin: 5px; 
 
    display: inline-block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<div id="filterControls"> 
 
    <label><b>Image Header Type</b> 
 
    </label> 
 
    <label> 
 
    <input type="checkbox" value="Slider" name="SliderCheck" />Slider</label> 
 
    <label> 
 
    <input type="checkbox" value="Fader" name="FaderCheck" />Fader</label> 
 
    <label> 
 
    <input type="checkbox" value="Static" name="StaticCheck" />Static</label> 
 
    <label><b>Image Header Styles</b> 
 
    </label> 
 
    <label> 
 
    <input type="checkbox" value="Full-Width" name="SliderCheck" />Full Width</label> 
 
    <label> 
 
    <input type="checkbox" value="Full-Screen" name="FaderCheck" />Full Screen</label> 
 
    <label> 
 
    <input type="checkbox" value="Arrow-Navigation" name="CustomCheck" />Arrow Navigation</label> 
 
</div> 
 

 
<div id="siteFilter"> 
 
    <div class="sectionContent box Slider Full-Width Full-Screen Arrow-Navigation" style="display: inline-block;"> 
 
    <a href="http://www.twelve.com.au/" target="_blank">Slider/Full Width</a> 
 
    </div> 
 
    <div class="sectionContent box Fader Full-Width Arrow-Navigation" style="display: inline-block;"> 
 
    <a href="http://www.galpins.com.au/" target="_blank">Fader/Full Width</a> 
 
    </div> 
 
    <div class="sectionContent box Static Full-Width" style="display: inline-block;"> 
 
    <a href="http://www.wmcaccounting.com.au/" target="_blank">Static/Full Width</a> 
 
    </div> 
 
</div>

+0

Только ответы на код, хотя и обеспечивают рабочее решение, на самом деле не проливают много информации об изменениях и улучшениях. Возможно, вы можете добавить небольшое объяснение в улучшенную логику? – Terry

+0

Спасибо, что работает отлично, жаль, что мне не удалось объяснить, что у меня в голове. – webmonkey237

+0

@Terry Спасибо за ваш конструктивный комментарий, я обновил ответ, чтобы показать какое-то объяснение. –

Смежные вопросы