【问题标题】:Retain div hide/show in page reload在页面重新加载中保留 div 隐藏/显示
【发布时间】:2019-11-20 19:34:07
【问题描述】:

我有一个隐藏和显示 html div 的按钮

<button id="hideshow" title="Click to Show/Hide Assessment"></button>

这是脚本

$(document).ready(function(){ /// hide and show button
    $('#hideshow').click(function() {
        $('#containerDiv1').toggle("slideLeft");
        $("i", this).toggleClass("fas fa-lg fa-chevron-up fas fa-lg fa-chevron-down");
    });
});

现在我要实现的是当用户选择隐藏div并单击按钮时,当他重新加载页面时它应该仍然隐藏。因为默认情况下,当我的网页打开时,我的 div 就会显示出来。

有什么帮助吗??

【问题讨论】:

    标签: javascript


    【解决方案1】:

    使用sessionStoragelocalStoragecookie 来保持状态,然后在页面加载时检索并恢复它。这确实需要一些工作,但 UI 的闪烁是免费的 ;)

    这说明了原理:

    $(document).ready(function(){ /// hide and show button
        const containerState = localStorage.getItem('containerDiv1');
        switch (containerState) {
          case 'visible':
            // your code for when the user last saw it "visible"
            break;
          case 'hidden':
            // your code for when the user last saw it "hidden"
            break;
          default:
            // any action that should take place when containerState is empty (not set, never clicked)
        }
        $('#hideshow').click(function() {
            $('#containerDiv1').toggle("slideLeft");
            $("i", this).toggleClass("fas fa-lg fa-chevron-up fas fa-lg fa-chevron-down");
            // on every click, store the current visibility state in localStorage
            localStorage.setItem('containerDiv1', $('#containerDiv1:visible').length ? 'visible' : 'hidden');
        });
    });
    

    【讨论】:

    • 这似乎是合适的。否则你可以从服务器发送一个带有 GET 或 POST 请求的标志,这将保持 div 的可见性。
    • @connexo 有一个问题,当我单击该按钮时,它总是以可见的形式存储在本地。它如何更改为隐藏?
    • $('#containerDiv1:visible').length 应该告诉你,但我不知道你如何在内部显示和隐藏该容器。你需要自己找出来。如果元素有display: none;,那么你可以使用window.getComputedStyle(document.querySelector('#containerDiv1')).display === 'none' ? 'hidden' : ' visible';
    【解决方案2】:

    按照 connexo 的回答,

    $('#containerDiv1").css('display')=== 'none' ? 'hidden' : ' visible'

    应该工作

    【讨论】:

    • @flyfish ... 欢迎来到 SO。 “应该工作” 是什么意思?你试过了吗?它是否有效?请记住,您的答案应该是对所提交问题的实际解决方案,而不仅仅是猜测。最后,解释一下为什么 OP 应该使用这个代码以及它是如何回答原始问题的。
    • Gelxxxx 在他的代码中使用了 jQuery,因此使用 jQuery 可以很容易地获取元素对 localStorage 日期项的显示值。我应该说他是否通过设置 display: none 来隐藏 div,这行代码 $('#containerDiv1").css('display')=== 'none' ? 'hidden' : 'visible' 有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多