【问题标题】:jquery multiple dropdown filter menujquery 多个下拉过滤器菜单
【发布时间】:2014-05-02 14:48:31
【问题描述】:

我根据多个下拉菜单选择隐藏和显示图片。我试图让 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>

【问题讨论】:

  • 请查看我对这个问题的回答:stackoverflow.com/questions/1271503/… 你只需要将这个概念扩展到第三个选项。
  • 感谢您的帮助,但这不是我想要的。我正在尝试使用多个动态过滤器,可以按任何顺序使用来优化搜索。

标签: javascript jquery html drop-down-menu


【解决方案1】:

试试这个 -

$("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();
});

LIVE DEMO

【讨论】:

  • 它会同时选择过滤,我想这就是你要找的。​​span>
  • 是的。正是我想要的。用第三个下拉菜单测试它,它可以工作。谢谢!!
  • 不客气。您可以根据需要链接尽可能多的选择:)
  • @bryan151,你能分享三个下拉过滤器的代码
【解决方案2】:

试试这个:

$('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;
});

Fiddle

【讨论】:

  • 我试过小提琴,它仍然只过滤一件事。在第一个过滤器之后,我会尝试应用第二个过滤器,但它会覆盖第一个过滤器。我试图让第二个下拉菜单进一步缩小结果。这应该是一个动态过滤器。
【解决方案3】:

要使其按您的要求工作,您可以尝试以下代码:

$('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/

但是:

我不认为这正是你想去的地方。请玩它,你会明白的。如果更换顶部过滤器,则底部过滤器一切正常。但是,如果您再次更改顶部过滤器,它将继续隐藏......基本上,一旦隐藏了某些东西,它就不会再回来了。这将成为一个逻辑难题,您的测试结构需要修改。随着您越深入,它只会变得越复杂。

您可能希望考虑在每个过滤器级别添加/删除不同的类,然后仅检查这些过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多