设置cookie以记住隐藏的元素状态
Setting a cookie to remember hidden element state
我在设置cookie以记住某些元素是否已隐藏时遇到问题。我使用的脚本(来自这里的另一个答案)似乎可以隐藏或显示我试图控制的元素,但在重新加载/更改页面时,似乎无法"记住"当前状态。
在我目前正在开发的网站上,目前只有两个页面有这个代码:
http://www.emelisandetribute.com/music.php和http://www.emelisandetribute.com/videos.php
页面上使用的javascript(直接在标记之前)如下:
<script type="text/javascript">
function setCookie (name, value, expires, path, domain, secure) {
document.cookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
function getCookie (name) {
var cookie = " " + document.cookie;
var search = " " + name + "=";
var setStr = null;
var offset = 0;
var end = 0;
if (cookie.length > 0) {
offset = cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = cookie.indexOf(";", offset);
if (end == -1) {
end = cookie.length;
}
setStr = unescape(cookie.substring(offset, end));
}
}
if (setStr == 'false') {
setStr = false;
}
if (setStr == 'true') {
setStr = true;
}
if (setStr == 'null') {
setStr = null;
}
return(setStr);
}
function hideFooter() {
setCookie('footer_state', false);
document.getElementById('toggleoff').style.display = 'none';
document.getElementById('toggleon').style.display = 'block';
document.getElementById('footer1').style.display = 'none';
document.getElementById('footer2').style.display = 'none';
document.getElementById('footer3').style.display = 'none';
}
function showFooter() {
setCookie('footer_state', null);
document.getElementById('toggleoff').style.display = 'block';
document.getElementById('toggleon').style.display = 'none';
document.getElementById('footer1').style.display = 'block';
document.getElementById('footer2').style.display = 'block';
document.getElementById('footer3').style.display = 'block';
}
function checkFooter() {
if (getCookie('footer_state') == null) { // if popup was not closed
document.getElementById('toggleoff').style.display = 'block';
document.getElementById('toggleon').style.display = 'none';
document.getElementById('footer1').style.display = 'block';
document.getElementById('footer2').style.display = 'block';
document.getElementById('footer3').style.display = 'block';
}
}
</script>
相关元素的HTML是:
<div class="mainfooterwrapper">
<span class="mainfootertoggle" id="toggleoff"><a href="#" onclick="hideFooter(); return false;">HIDE THIS</a></span>
<span class="mainfootertoggle" id="toggleon" style="display:none"><a href="#" onclick="showFooter(); return false;">SHOW THIS</a></span>
<div class="mainfooter1" id="footer1">
<?php include "mainfooter1.php"; ?>
</div>
<div class="mainfooter2" id="footer2">
<?php include "mainfooter4.php"; ?>
</div>
<div class="mainfooter3" id="footer3">
<?php include "mainfooter3.php"; ?>
<div style="clear:both; float:right; position:absolute; bottom:0; right:0; overflow:hidden; margin:5px 15px 5px 5px;">
<?php include "footer.php"; ?>
</div>
</div>
</div>
通过阅读其他一些问题和答案,我尝试通过编辑CSS和将代码添加到HTML来添加所有元素,但这使元素完全消失。
我突然想到,我真正需要的是一段代码,当元素被用户隐藏时,它会创建一个cookie,但如果元素再次显示,它也会删除/修改cookie。我意识到,我现在拥有的(尽管工作不正常)是一个代码,它实际上有一个"ON"开关,但没有"OFF"开关。
如有任何帮助或建议,我们将不胜感激。
您缺少的是调用一些代码,如果页脚以前是隐藏的,那么这些代码将设置为隐藏页脚。你从来没有这样做过。checkFooter
函数将是显而易见的。你现在不用,但你应该用。但是,您应该反转其逻辑,以便在getCookie('footer_state') == false
。因此,更改函数如下:
function checkFooter() {
if (getCookie('footer_state') == false) { // if popup WAS closed
document.getElementById('toggleoff').style.display = 'none';
document.getElementById('toggleon').style.display = 'block';
document.getElementById('footer1').style.display = 'none';
document.getElementById('footer2').style.display = 'none';
document.getElementById('footer3').style.display = 'none';
}
}
现在,请确保在加载页面时调用该方法。使用谷歌分析和mCustomScrollBar
脚本在页面底部添加以下代码:
<script>
checkFooter();
</script>
相关文章:
- 从组件状态的数组中删除元素
- 检查元素是否将状态从隐藏更改为可见
- 我如何为列出的选项卡元素编写一个Protractor测试,它会检查它是否's是否处于活动状态
- jQuery隐藏元素在使用CSS显示时保持隐藏状态
- 保持元素处于禁用状态,直到未在 Angularjs 中选择下拉列表
- 如何在每次页面重新加载时更改渐变背景,同时保持光标位置元素处于活动状态
- 通过单选按钮状态设置HTML元素的可见性
- 所选列表元素不会保持选中状态(通过ajax请求更新后)
- 在检查单选按钮检查状态后启用/禁用表单元素
- 从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量
- 无法使用 js 和 Selenium 设置 Web 元素状态“已选择”
- 将元素状态保存在angularjs中
- 设置cookie以记住隐藏的元素状态
- 如何从Javascript中的appendchild复选框中获取元素状态
- <音频>使用Javascript的HTML5元素状态
- 在Ajax请求开始和结束时显示和隐藏元素(状态栏)
- 确定输入元素状态
- 如何在回发时维护 UI 元素状态?(ASP.NET MVC)
- 如何强制保持元素状态不变
- 是否有一种在MutationObserver机制触发之前捕获元素状态的方法(onvisibility - itychan