[英]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
這些 cookie 可能需要不同的操作,因此為什么我要保留該選項以從該函數中調用全局函數。
您有幾個問題,請閱讀下面的評論
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.