为什么不'这行得通吗?它涉及cookie、函数和参数
Why doesn't this work? It involves cookies, functions and parameters
为什么下面的代码不起作用?我试图调用checkCookie()
,然后在该函数中通过原始函数的参数调用2个其他函数。它根本不起作用。
<!DOCTYPE html>
<html>
<head>
<script>
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname+"="+cvalue+"; "+expires;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.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(cookieName, action1, action2) {
var temp = getCookie(cookieName);
if (temp!= "") {
window[action1];
} else {
temp = window[action2];
if (temp != "" && temp!= null) {
setCookie(cookieName, temp, 30);
}
}
}
function alertUser(message, varName){
alert(message + varName);
}
function promptUser(message){
prompt(message,"");
}
checkCookie("username", alertUser("Welcome back, ", temp), promptUser("Please enter in your name"));
</script>
</head>
<body>
</body>
</html>
我尝试过很多不同的组合,太多了,以至于我迷失了方向,所以我很抱歉不能向你展示我尝试过的所有组合。非常感谢您的帮助!:)对于许多可能需要不同操作的不同cookie,我想多次调用checkCookie
,因此我保留了从该函数中调用全局函数的选项。
您有几个问题,请阅读下面的评论
function setCookie(cname,cvalue,exdays) {
//omitted
}
function getCookie(cname) {
//omitted
}
function checkCookie(cookieName, action1, action2) {
//temp is available only here
var temp = getCookie(cookieName);
if (temp!= "") {
//action1(alertUser) bad usage
window[action1];
} else {
//also action2(promptUser) bad usage
temp = window[action2];
//redundant, just `if(temp)`
if (temp != "" && temp!= null) {
setCookie(cookieName, temp, 30);
}
}
}
function alertUser(message, varName){
alert(message + varName);
}
//doesn't store value
function promptUser(message){
prompt(message,"");
}
//temp is not available here
//although it's available, it's a bad idea to use vars from other functions
//if person doesn't enter anything, this will break, no cycling
checkCookie("username", alertUser("Welcome back, ", temp), promptUser("Please enter in your name"));
更好的
function setCookie(cname, cvalue, exdays) {
//omitted
}
function getCookie(cname) {
//omitted
}
function checkCookie(cookieName, callback) {
var temp = getCookie(cookieName);
if (temp) {
callback(null, temp);
} else {
callback('No cookie', null);
}
}
function callbackFn(err, result) {
if (err) {
var uname = prompt('Please enter in your name');
if (uname === '') {
//hit ok, but no value, re-show prompt
checkCookie('username', callbackFn);
} else if (uname) {
//entered value, hit ok
setCookie('username', uname, 30);
} else {
//hit cancel
checkCookie('username', callbackFn);
//or leave website?
}
} else {
alert('Welcome back, ' + result);
}
}
checkCookie('username', callbackFn);
相关文章:
- 为什么没有用于cookie的内置JS函数
- 有人可以帮助我调试带有addClass和removeClass函数的“每个会话一次”cookie吗?
- 加载 cookie 后调用 JavaScript 函数
- Javascript Security:将敏感数据存储在比cookie更安全的自调用函数中
- 表达式'$的结果.cookie'[未定义]不是函数
- 为什么不'这行得通吗?它涉及cookie、函数和参数
- JQuery cookie 在其他函数中设置
- 使用函数setTimerOut和jquery Cookie的模型窗口
- HTML 从外部 JavaScript 文件触发函数并返回 cookie
- 重复/循环javascript函数来检查cookie是否已更改
- HTML 正文加载函数需要删除并使用 cookie 执行相同的函数,但只能进行第一次访问
- 为什么这个函数不读取和显示cookie
- 如果 cookie 匹配,则调用 JS 函数
- $.cookie('name') 不是一个函数
- 将Cookie添加到一个简单的函数中
- 通过javascript或jQuery对函数进行Cookie处理
- PHP/Javascript混合Cookie函数
- jQuery$.cookie不是函数
- 函数获胜't存储cookie
- 如何在Rails中重写简单的.js页面查看计数器cookie函数