【发布时间】:2018-05-11 10:57:24
【问题描述】:
我正在构建一个包含两个过滤器的信息卡片库。一个过滤器用于日期,另一个过滤器用于类别。页面内容应根据用户的选择而变化。
过滤器目前是独立工作的,我不知道如何组合它们以获得无缝的过滤体验。
第一个故障发生在您同时选择“关注人”和“任何一天”时。您必须单击按钮几次才能看到故障。过滤器不显示“关注人”和“任何一天”独有的课程。它显示了实际上不应该存在的类别。
第二个故障,当你点击“显示全部”时,不出现不透明效果。
JS 用于过滤卡片
var $cards = $('.class-card');
var $dayFilters = $('.dayFilter');
var $categoryFilters = $('.categoryFilter');
var $noResults = $('#noResults');
// Show all days on page load
$cards.show();
// Hide the no results message
$noResults.hide();
$categoryFilters.on('click', function(e){
var $category = $(e.target);
$categoryFilters.removeClass('selected');
$category.addClass('selected')
filterCards();
});
$dayFilters.on('click', function(e){
var $day = $(e.target);
$dayFilters.removeClass('selected');
$day.addClass('selected')
filterCards();
});
function filterCards () {
$cards.show();
$noResults.hide();
var $day = $dayFilters.filter('.selected');
var $category = $categoryFilters.filter('.selected');
var filterClasses = [];
if ($day.length) filterClasses.push('.'+ $day.data('target'));
if ($category.length) filterClasses.push('.'+ $category.data('target'));
if (filterClasses) {
var filter = filterClasses.join('');
$cards.not(filter).hide();
if (!$cards.filter(filter).length) {
$noResults.show();
}
}
}
JS 用于按钮的不透明效果
// By default, "View All" is the active button
$('#buttonAll').addClass( 'ACTIVE' );
$('#button1').addClass( 'PASSIVE' );
$('#button2').addClass( 'PASSIVE' );
$('#button3').addClass( 'PASSIVE' );
$('#button4').addClass( 'PASSIVE' );
// When user chooses, "buttonAll", make it stand-out
$('#buttonAll').click(function() {
$('#buttonAll').removeClass( 'PASSIVE' ).addClass( 'ACTIVE' );
$('#button1').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button2').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button3').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button4').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
});
// When user chooses, "button1", make it stand-out
$('#button1').click(function() {
$('#buttonAll').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button1').removeClass( 'PASSIVE' ).addClass( 'ACTIVE' );
$('#button2').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button3').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button4').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
});
// When user chooses, "button2", make it stand-out
$('#button2').click(function() {
$('#buttonAll').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button1').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button2').removeClass( 'PASSIVE' ).addClass( 'ACTIVE' );
$('#button3').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button4').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
});
// When user chooses, "button3", make it stand-out
$('#button3').click(function() {
$('#buttonAll').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button1').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button2').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button3').removeClass( 'PASSIVE' ).addClass( 'ACTIVE' );
$('#button4').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
});
// When user chooses, "button4", make it stand-out
$('#button4').click(function() {
$('#buttonAll').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button1').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button2').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button3').removeClass( 'ACTIVE' ).addClass( 'PASSIVE' );
$('#button4').removeClass( 'PASSIVE' ).addClass( 'ACTIVE' );
});
我的页面托管在CodePen。
【问题讨论】:
-
请将其简化为仅显示您寻求帮助的问题的示例,并更清楚地描述您要解决的问题,而不是“它没有按预期过滤” .
-
上次我简化代码时,另一个用户要求我展示更多内容。你可以看看 CodePen 吗?确实,如果您单击周围,您会发现问题。否则,我无法告诉你问题是什么,因此我为什么在这里。
-
请修改您的标题以提供更多信息。滚动浏览数千个问题,可以帮助您的领域专家一定会忽略涉及“奇怪”或其他意见或非描述性细节的问题。
-
看起来正在工作。我点击“”关注人“,只显示“sort-button3”类的元素。你能帮忙演示/澄清问题吗?
-
问题似乎是两个过滤器(能力和天)独立运行。一个过滤器的值基本上由另一个过滤器重置。解决方案是将每个过滤器值保存到一个变量中,并使用
filterCards()函数中的变量。我现在没有时间写答案,但如果没有其他人,我可以稍后再写。
标签: javascript jquery html filter filtering