我已经成功编码了以下行为:
这是上面代码的jQuery,可以运行并带有注释:
<script>
$(document).ready(function () {
// If user clicks the toggle it hides/shows the divs
$(" .togglediv ").click(function () {
var closed = $(" .siemaholder, .c_l_off, .c_r_off ").is(":hidden");
if (closed)
$(" .siemaholder, .c_l_off, .c_r_off ").show();
else
$(" .siemaholder, .c_l_off, .c_r_off ").hide();
// If user uses the toggle it sets a cookie to remember the toggle state
setCookie("open", closed, 365);
});
var openToggle = getCookie("open");
if (openToggle=="true") {
$(" .siemaholder, .c_l_off, .c_r_off ").show();
}
else {
$(" .siemaholder, .c_l_off, .c_r_off ").hide();
}
});
function setCookie(c_name, value, exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
document.cookie = c_name + "=" + c_value;
}
function getCookie(c_name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^\s+|\s+$/g, "");
if (x == c_name) {
return unescape(y);
}
}
}
</script>
我的问题是,当不存在任何cookie时(当用户首次访问该页面并且尚未生成任何cookie时),默认情况下div是 hidden 。我不想要这个-我希望它们默认显示为 。
我的意图是默认显示它们,直到使用.toggle()设置cookie为止。我之前提到的。这样,当用户首次访问该页面时,就会显示该内容,然后可以由用户手动“隐藏”(从那里记住)。
有人可以帮我吗?
到目前为止,我已经尝试在脚本的开头使用$(" .siemaholder, .c_l_off, .c_r_off ").show();
,因此默认情况下将显示div,直到涉及cookie。这没用。
答案 0 :(得分:0)
有些服务器端Cookie用于授权用户。这些Cookie不应从不设置在客户端脚本中,因为它们会导致 安全性问题(我的原始答案中对此进行了描述)。
客户端cookie可以用于默认用户设置(如您的情况)如果不用于授权用户。
在这种情况下,您应该做的就是让jquery在$(document).ready(
中设置如下Cookie:
$(document).ready(function () {
if (!$.cookie('open') || !$.cookie('closed')) {
$.cookie('open', 1, {expires: 10});
}
$(" .togglediv ").click(function () {
var closed = $(" .siemaholder, .c_l_off, .c_r_off ").is(":hidden");
if (closed)
$(" .siemaholder, .c_l_off, .c_r_off ").show();
$.removeCookie('closed');
$.cookie('open', 1, {expires: 10});
else
$(" .siemaholder, .c_l_off, .c_r_off ").hide();
$.removeCookie('open');
$.cookie('closed', 1, {expires: 10});
,您可以找到有关这些主题的更多信息。