我根据多个下拉菜单选项隐藏和显示图片。我正在努力让2个和更多可能的下拉菜单一起工作以优化搜索。
如果我在第一个下拉列表中选择一个项目,我想应用第二个过滤器,依此类推任何其他下拉列表。
我需要一些关于jquery的帮助。我目前的问题是第二个过滤器永远不会启动。它会被覆盖并重置过滤器。如果可能的话,我想添加一个第三个过滤器来缩小搜索范围,以便找到我正在寻找的内容。这是一些示例代码..
$('select').change(function(){
var current = $(this).attr('value');
if(current == 'all'){
$('#FilterContainer').children('div.all').show();
}
else {
$('#FilterContainer').children('div:not(.' + current + ')').hide();
$('#FilterContainer').children('div.' + current).show();
}
return false;
})
HTML
<p>Filter: </p>
<select class="filterby">
<option value="all"><h5>Show All</h5></option>
<option value="1"><h5>One</h5></option>
<option value="2"><h5>Two</h5></option>
<option value="3"><h5>Three</h5></option>
</select>
<p>Location: </p>
<select class="filterby">
<option value="all"><h5>All Locations</h5></option>
<option value="nj"><h5>NJ</h5></option>
<option value="ny"><h5>NY</h5></option>
<option value="pa"><h5>PA</h5></option>
</select>
<div id="FilterContainer">
<div class="all 1 nj">Test One NJ</div>
<div class="all 1 ny">Test One NY</div>
<div class="all 1 pa">Test One PA</div>
<div class="all 2 nj">Test Two NJ</div>
<div class="all 2 ny">Test Two NY</div>
<div class="all 2 pa">Test Two PA</div>
<div class="all 3 nj">Test Three NJ</div>
<div class="all 3 ny">Test Three NY</div>
<div class="all 3 pa">Test Three PA</div>
<div class="all 1 nj">Test One NJ</div>
<div class="all 1 pa">Test One PA</div>
<div class="all 1 pa">Test One PA</div>
<div class="all 2 nj">Test Two NJ</div>
<div class="all 2 ny">Test Two NY</div>
<div class="all 2 ny">Test Two NY</div>
答案 0 :(得分:5)
试试这个 -
$("select.filterby").change(function(){
var filters = $.map($("select.filterby").toArray(), function(e){
return $(e).val();
}).join(".");
$("div#FilterContainer").find("div").hide();
$("div#FilterContainer").find("div." + filters).show();
});
答案 1 :(得分:0)
试试这个:
$('select').change(function () {
var current = this.value; // <------get the value this way.
if (current == 'all') {
$('#FilterContainer').find('div.all').show();
} else {
$('#FilterContainer').find('div').hide();
$('#FilterContainer').find('div.all.' + current).show();
}
return false;
});
答案 2 :(得分:0)
要使其按您的要求运行,您可以尝试以下代码:
$('select').change(function () {
var current = this.value;
$.each($('#FilterContainer').find('div.all').not('.hidden').not('.'+current), function(){
$(this).addClass('hidden');
});
$.each($('.'+current), function () {
$(this).removeClass('hidden');
});
});
添加CSS:
.hidden{
display:none;
}
给你这个工作小提琴:http://jsfiddle.net/Q5DpP/5/
但是:
我不认为这正是你想去的地方。请玩它,你会明白的。如果您更改顶部过滤器,那么底部过滤器一切正常。但是,如果你再次更改顶部过滤器,它将继续隐藏...基本上,一旦隐藏某些东西它就不会再回来了。这就变成了一个逻辑难题,你的测试结构需要修改。随着你越来越深,它变得越来越复杂。
您可能希望考虑在每个过滤器级别添加/删除不同的类,然后仅检查这些过滤器。