带有cookies的javascript计数器不';行不通
我只是试着用cookies制作一个计时器,使一个按钮只可点击3次(我必须用cookies制作,因为它会在过程中刷新页面),我制作了这个计时器,但它不起作用。我的页面上没有任何变化 我所拥有的代码是由程序执行的 计时器-(或者至少是我认为可以用作计时器的): Coockie功能:带有cookies的javascript计数器不';行不通,javascript,cookies,setcookie,Javascript,Cookies,Setcookie,我只是试着用cookies制作一个计时器,使一个按钮只可点击3次(我必须用cookies制作,因为它会在过程中刷新页面),我制作了这个计时器,但它不起作用。我的页面上没有任何变化 我所拥有的代码是由程序执行的 计时器-(或者至少是我认为可以用作计时器的): Coockie功能: function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 *
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function checkCookie(name) {
var value = getCookie("name");
if (value != "") {
return value;
}
}
函数setCookie(cname、cvalue、exdays){
var d=新日期();
d、 设置时间(d.getTime()+(exdays*24*60*60*1000));
var expires=“expires=“+d.toutString();
document.cookie=cname+“=”+cvalue+”;“+expires+”;path=/”;
}
函数getCookie(cname){
变量名称=cname+“=”;
var decodedCookie=decodeURIComponent(document.cookie);
var ca=decodedCookie.split(“;”);
对于(变量i=0;i
getCookie始终返回“undefined”,因为cookie名称错误。拆下制动器
function checkCookie(name) {
var value = getCookie(name); //here you go
if (value != "") {
return value;
}
}
getCookie始终返回“undefined”,因为cookie名称错误。拆下制动器
function checkCookie(name) {
var value = getCookie(name); //here you go
if (value != "") {
return value;
}
}
一些问题:
- 从cookie读取值时,请注意它具有字符串数据类型。在将其与另一个数字进行比较或向其中添加1之前,需要将其转换为数字
- 函数
使用了错误的(硬编码的)cookie名称,但它甚至不是必需的函数。您可以使用checkCookie
完成所有这些操作getCookie
mailagain.onclick = function () {
// make sure to convert to number (unitary plus), or use 0 when it is not a number:
var counter = (+getCookie("countIt") || 0) + 1;
setCookie("countIt", counter, 1)
if (counter > 3) {
console.log('clicked too many times! (', counter, ')');
} else {
console.log('clicked ' + counter + ' number of times.');
}
};
一些问题:
- 从cookie读取值时,请注意它具有字符串数据类型。在将其与另一个数字进行比较或向其中添加1之前,需要将其转换为数字
- 函数
使用了错误的(硬编码的)cookie名称,但它甚至不是必需的函数。您可以使用checkCookie
完成所有这些操作getCookie
mailagain.onclick = function () {
// make sure to convert to number (unitary plus), or use 0 when it is not a number:
var counter = (+getCookie("countIt") || 0) + 1;
setCookie("countIt", counter, 1)
if (counter > 3) {
console.log('clicked too many times! (', counter, ')');
} else {
console.log('clicked ' + counter + ' number of times.');
}
};
到底是什么不起作用?你有没有检查过浏览器控制台有没有错误?我不知道到底是什么不起作用,我想cookie永远不会被设置或者什么的。这是我第一次使用cookies,所以问题可能很简单。此外,浏览器也没有给出任何错误。我在chrome的调试器中做了
getCookie(“countIt”)
,它说getCookie(“countIt”):“NaN”
,甚至在按下应该使计时器上升的按钮之后,还有什么不起作用?你有没有检查过浏览器控制台有没有错误?我不知道到底是什么不起作用,我想cookie永远不会被设置或者什么的。这是我第一次使用cookies,所以问题可能很简单。此外,浏览器没有给出任何错误。我在chrome的调试器中执行了getCookie(“countIt”)
,它说getCookie(“countIt”):“NaN”
即使在按下应该使计时器上升的按钮后,我还是这样做了,它完成了我的代码应该做的事情,并且工作得很好:)我还可以在控制台中将重置cookies更改为0,或者将其有效时间更改为1分钟吗?因为这样比较容易测试我的东西。不客气。您可以通过另一个按钮将代码添加到,以便从头开始测试。要使cookie更快过期,请将一个较小的数字作为最后一个参数传递给setCookie
:1/(24*60)
将为1分钟。感谢我这样做,它完成了我的代码应该做的事情,并且工作非常完美:)我是否可以在控制台中将cookie重置为0,或者将其有效时间更改为1分钟?因为这样比较容易测试我的东西。不客气。您可以通过另一个按钮将代码添加到,以便从头开始测试。要使cookie更快过期,将较小的数字作为最后一个参数传递给setCookie
:1/(24*60)
将是1分钟。