【发布时间】:2017-03-09 17:35:12
【问题描述】:
我正在尝试创建可以显示/隐藏多个 div 的按钮,并且我还想使用 localStorage 来记住一个过滤器(单击了哪些按钮,哪些没有单击)。
我找到了this jsfiddle,并正在尝试使其适应我的目的。 Here is my jsfiddle。我非常感谢帮助更新此 jsfiddle 以使其正常工作:
- localStorage 不再有效;当我刷新页面时,不记得状态。 (它在原来的 jsfiddle 上做了)。我希望 localStorage 记住隐藏了哪些 div 并保留红色的“危险”按钮类
- 如果没有点击按钮:显示所有 div(工作正常)
- 如果点击了一项运动按钮,则仅显示该运动的 div(检查,但目前仅针对一项运动)
- 如果单击了多个运动按钮,则仅显示那些被切换的运动。隐藏其他未切换的。 (我的头脑在思考如何让它工作。不知道如何让不同的切换相互检查,看看哪些切换或没有切换)
- 按钮在未切换时为灰色,在切换时为红色(我现在让 toggleClass 在其中一个按钮上工作)
- 这可能不言而喻,但如果点击了所有运动按钮,则显示所有运动。
这是来自my fiddle的代码。
<button type="button" class="ncaabfilter btn btn-xs btn-default">NCAAB</button> <button type="button" class="ncaaffilter btn btn-xs btn-default">NCAAF</button> <button type="button" class="nbafilter btn btn-xs btn-default">NBA</button> <button type="button" class="nflfilter btn btn-xs btn-default">NFL</button>
<div class="ncaaf">
NCAAF Game 1
</div>
<div class="nfl">
NFL Game 1
</div>
<div class="nba">
NBA Game 1
</div>
<div class="ncaab">
NCAAB Game 1
</div>
<div class="ncaaf">
NCAAF Game 2
</div>
<div class="nfl">
NFL Game 2
</div>
<div class="nba">
NBA Game 2
</div>
<div class="ncaab">
NCAAB Game 2
</div>
$('.ncaabfilter').click(function(){
$('.ncaaf, .nfl, .nba').toggle(800);
var isVisible = $('.ncaaf, .nfl, .nba').is(':visible');
localStorage.setItem('visible', isVisible);
$('.ncaabfilter').toggleClass('btn-default btn-danger');
});
var isVisible = localStorage.getItem('visible') === 'false' ? false : true;
$('.ncaaf, .nfl, .nba').toggle(isVisible);
非常感谢您的帮助!
更新:下面的 selami 指出 localStorage 不记得切换的 div 因为 800 秒。我想要一个动画,所以也许我让它在 localStorage 生效之前等待 800 秒?但是,当页面刷新时,如何让 localStorage 保留切换按钮的 btn-danger 类?
【问题讨论】:
-
您没有提到点击其他按钮时应该显示哪些文本?
-
@VPK 抱歉,我认为这是隐含的。例如。如果单击 NCCAF,NCAAF div 应该会显示,而其他 div 会隐藏。如果您单击 NCAAF 和 NBA,NCAAF 和 NBA 比赛 div 应该会显示而其他人会隐藏。等等,
-
如果所有按钮都没有被点击,即灰色,没有 div 应该正确显示?
-
对不起,没有。根据上面的#2,如果没有点击按钮(新访问者访问时的默认状态),按钮应该是灰色的,但所有的 div 都应该显示。当没有按钮被切换(并且它们是灰色)或所有按钮都被切换(并且它们是红色)时,所有 div 都可以显示。谢谢!
-
在我的回答中检查更新的小提琴。
标签: javascript jquery local-storage toggle