【问题标题】:Jquery filtering system multiple select doesn't workjQuery过滤系统多选不起作用
【发布时间】:2013-01-03 18:02:31
【问题描述】:

我一直在尝试解决这个问题,但我在 javascript/jquery 方面不太擅长,所以我再次请教你们。

如果我选择白色和蓝色,我会得到所有白色和蓝色的动物,那很好。就像我选择马和鸡一样......但问题是,一旦我选择白马或其他东西,我就会得到随机信息......我的问题是我该如何解决这个问题?

Javascript:

$(function(){
$('div.tags').delegate('input[type=checkbox]', 'change', function()
{
var $lis = $('.results > li'),
    $checked = $('input:checked');

if ($checked.length)
{
    var selector = $checked.map(function ()
    {
        return '.' + $(this).attr('rel');
    }).get().join();

    $lis.hide().filter(selector).show().addClass("show");   
    console.log(selector)
}
else
{
    $lis.show().removeClass("show");
}
});


})

HTML:

 <div class="tags">
 <fieldset class="filter-grp">
 <label><input type="checkbox" rel="white" name="year" /> white </label><br>
 <label><input type="checkbox" rel="blue" name="year" /> blue </label><br>
 <label><input type="checkbox" rel="yellow" name="year" /> yellow </label><br>
</fieldset>

<br>
<fieldset class="filter-grp">
<label><input type="checkbox" rel="horse" name="type"  /> horse</label><br>
<label><input type="checkbox" rel="chicken" name="type"  /> chicken</label><br>
<label><input type="checkbox" rel="cow" name="type"  /> cow</label><br>
</fieldset>
<br>


</div>

<ul class="results">
<li class="white cow">white cow</li>
<li class="white horse">white horse</li>
<li class="white chicken">white chicken</li>
<li class="yellow cow">yellow cow</li>
<li class="blue horse">blue horse</li>
<li class="white chicken">white chicken</li>
 </ul>

在这里测试 :) http://jsfiddle.net/d6Zyr/9/

【问题讨论】:

  • 看起来它对我来说很好用。 CSS 选择器中的 , 表示 OR 而不是 AND,因此单击“white”和“horse”表示“一切都是白色的或一切都是马”。
  • 在选择white n horse 时,您是否只需要white horse..??
  • 好吧,有没有办法做到这一点,然后如果我选择白色和马,我只过滤白马而不是所有白色和所有马的东西??
  • 是的 A.V.这正是我的意思,我需要过滤掉白马,而不是所有的白马嘿嘿

标签: javascript jquery list filter selection


【解决方案1】:
$(function () {
$('div.tags').delegate('input[type=checkbox]', 'change', function () {
    var $lis = $('.results > li'),
        $checked = $('input:checked');

    if ($checked.length) {
        var selector = $checked.map(function () {
            return '.' + $(this).attr('rel');
        }).get().join();
        selector = selector.replace(",", "") // removes OR selector
        $lis.hide().filter(selector).show().addClass("show");
        console.log(selector)
    } else {
        $lis.show().removeClass("show");
    }
});


}) 

DEMO

【讨论】:

  • 是的,只是测试了一些东西,但我看到了另一个小问题。如果我想过滤掉黄色、白色和蓝色的马,它就不能正常工作,而且如果我只想选择它不起作用的颜色。所以假设我想选择所有蓝色和黄色的动物......我现在做不到。
  • 我想你可能需要引入另一个选择器来在ORAND条件之间切换......否则只需检查所有动物名称,然后检查您提到的情况所需的颜色..
  • 好吧,你也许可以看看这个页面(它可能是一门外语,但至少你能明白我的意思)berckmans-designs.nl/filternew
  • 这和我更新的小提琴一样。不是吗..??还是我错过了什么??
  • hmm.. 我认为是的,有没有更简单的过滤方法?我的意思是我对 jquery 或 javascript 没有任何了解,只是试图创建一些我实际上不理解的东西......所以我不太难理解你的意思是引入另一个开关。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 2023-03-26
  • 2011-08-08
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
相关资源
最近更新 更多