我正在尝试创建一个启动时发出警报的网页。系统会提示用户输入名称或用户名。用户名将保存在cookie中。 每次新会话开始时,用户会看到一条消息,说明 “hello”+用户名 。但是,如果没有在访问网页的新部分后弹出消息,我就无法做到这一点。
到目前为止,这是我的代码:
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 c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1)
{
c_start = c_value.indexOf(c_name + "=");
}
if (c_start == -1)
{
c_value = null;
}
else
{
c_start = c_value.indexOf("=", c_start) + 1;
var c_end = c_value.indexOf(";", c_start);
if (c_end == -1)
{
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start,c_end));
}
window.c_value = c_value
return c_value;
}
function alertornot(){
if (get_cookie('alerted')==''){
loadalert()
document.cookie="alerted=yes"
}
}
function loadalert(){
alert(window.username + "we meet again" )
}
function alert() {
var username=getCookie("username");
if (username!=null && username!="") {
if (once_per_session==0) {
loadalert()
}
else {
alertornot()
}
}
else {
username=prompt("Please enter your name:","");
// window.username = username
if (username!=null && username!="") {
setCookies("username", username, 365)
}
}
}
我是编程和javascript的新手。如果这是一个愚蠢的问题,我很抱歉。
答案 0 :(得分:1)
您进行无限循环,因为您替换了“alert(...)”本机函数并在此函数中调用alert()。 执行架构:alert()> loadalert()> alert()> loadalert()>等...
重命名您的功能。
function n_alert() {
window.username = getCookie("username");
console.log(username);
if (username!="undefined" && username!==null && username!=="") {
alert(window.username + " we meet again" );
} else {
username=prompt("Please enter your name:","");
if (username!==null && username!=="") {
setCookie("username", username, 365);
}
}
}
n_alert();
答案 1 :(得分:0)
您不应该将函数命名为alert
,因为它已经是一个全局对象。另外,我没有看到你在哪里调用这个代码。
我会将alert
函数重命名为promptUser
(或其他内容)并将此代码添加到底部:
promptUser();
loadAlert();
答案 2 :(得分:0)
试试这个:
<script>
function getCookie(c_name)
{
var c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1)
{
c_start = c_value.indexOf(c_name + "=");
}
if (c_start == -1)
{
c_value = null;
}
else
{
c_start = c_value.indexOf("=", c_start) + 1;
var c_end = c_value.indexOf(";", c_start);
if (c_end == -1)
{
c_end = c_value.length;
}
c_value = unescape(c_value.substring(c_start,c_end));
}
return c_value;
}
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 checkCookie()
{
var username=getCookie("username");
if (username!=null && username!="")
{
alert("Welcome again " + username);
}
else
{
username=prompt("Please enter your name:","");
if (username!=null && username!="")
{
setCookie("username",username,365);
}
}
}
</script>
</head>
<body onload="checkCookie()">
答案 3 :(得分:0)
我的上次anwser here。
当我刷新页面时,弹出窗口仍然出现
如果您只想弹出一次(而不是每个刷新页面),请设置另一个cookie。
请参阅Make a cookie expire in 30 seconds了解第二个设置Cookie,而不是一天(适用于popupcookie)。
function isCookie(c_name) {
var cook = getCookie(c_name);
return (cook!="undefined" && cook!==null && cook!=="");
}
function n_alert() {
var username = getCookie("username");
if (isCookie("username")) {
if (!isCookie("popupcookie")) {
alert(username + " we meet again" );
} else {
console.log("hidden alert : " + username + " we meet again" );
}
setCookie("popupcookie", username, 1); //restart
} else {
username=prompt("Please enter your name:","");
if (username!==null && username!=="") {
setCookie("username", username, 365);
}
}
}
n_alert();
http://jsbin.com/ucipom/6/edit
备注我发现问题,如果你使用不同的目录(路径)ex:' ./ '和' ./ dir1 / 1 / '。你可能有问题。就像你没有在目录中定义或重新定义根cookie一样。也许使用sessionstorage。