【问题标题】:jQuery product filter functionjQuery产品过滤功能
【发布时间】:2012-09-11 20:23:59
【问题描述】:

对于我正在创建的动态显示产品的页面,我需要创建一个排序的产品过滤器。单击 ul#product-filter 中的 li 元素将显示/隐藏相应的 div(产品类别)。

查看我的 HTML 代码:

<ul id="product-filter">
    <li class="cat_1">category 1</li>
    <li class="cat_2">category 2</li>
</ul>

<div id="product-display">
    <div class="cat_1">
        <img src="image1.gif">
    </div>

    <div class="cat_2">
        <img src="image2.gif">
    </div>
</div>

目前我的 jQuery 解决方案是:

$('#products-filter li[class^=cat_]').click(function() {
    $('#products-display div[class=' + $(this).attr('class') + ']').fadeToggle();
});

但是,这只会淡化切换所选类别(产品类别 div)。客户已请求单击初始类别 ('li') 将隐藏所有其他“产品类别” div 并仅显示选定的。单击另一个 ('li') 类别也会显示第二个产品 div,仍然显示先前选择的.. 等等。重新单击同一个 'li' 项目将再次隐藏该类别.. 等等。

“重置”按钮也是理想的选择。

任何建议将不胜感激。

【问题讨论】:

  • 试试$('#products-display div.' + this.className).fadeToggle();

标签: jquery filter hide show


【解决方案1】:

我认为这实现了第一次点击的“客户端请求行为”只显示点击的项目,随后的点击只是切换点击的项目(让其他项目保持原样):

var clickOnce = false;
$('#product-filter li').click(function() {
    if (!clickOnce) {
        $('#product-display > div').hide();
        $('#product-display .' + this.className).show();
        clickOnce = true;
    } else {
        $('#product-display .' + this.className).toggle();
    }
});​

工作演示:http://jsfiddle.net/jfriend00/KHeVp/

要仅显示点击的内容并隐藏所有其他内容(更传统的行为),您可以使用:

$('#product-filter li').click(function() {
    $('#product-display > div').hide();
    $('#product-display .' + this.className).show();
});​

工作演示:http://jsfiddle.net/jfriend00/Tcjam/

或者用动画:

$('#product-filter li').click(function() {
    $('#product-display > div:visible').slideUp();
    $('#product-display .' + this.className).stop(true).slideDown();
});​

工作演示:http://jsfiddle.net/jfriend00/ZThzA/

【讨论】:

  • 感谢您的回复。这看起来没问题。但是大约有 10 个类别,如果需要,它们需要显示多个。
  • @user1426265 - 此代码隐藏所有不匹配的类别并显示所有匹配的类别,无论是 2 还是 100。它可以正常工作,无论有多少总类别和多少匹配类别。这有什么不是你想让它做的?
  • @user1426265 - 好的,我修改了我的答案以希望实现“客户端请求的行为”。
  • 顶级演示很完美。非常感谢!您能否简要解释一下: var clickOnce = false; ?其他一切都完全有道理。再次感谢!
  • @user1426265 - 你的客户说他们希望在第一次点击时有不同的行为,所以clickOnce 是一个全局变量,它告诉代码这是否是第一次点击。第一次单击后,它被设置为true,所以它总是进行切换。此外,由于您似乎是 StackOverflow 的新手,您是否意识到如果您的问题有适合您的答案,您应该单击答案左侧的复选标记以表明您的问题已解决?这为您和回答者提供了一些声望点,可以在这里为您赢得特权。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多