保存名称,然后在每个会话中说出“hi”+ name

时间:2013-06-03 18:54:27

标签: javascript cookies

我正在尝试创建一个启动时发出警报的网页。系统会提示用户输入名称或用户名。用户名将保存在cookie中。 每次新会话开始时,用户会看到一条消息,说明 “hello”+用户名 。但是,如果没有在访问网页的新部分后弹出消息,我就无法做到这一点。

到目前为止,这是我的代码:

HTML

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的新手。如果这是一个愚蠢的问题,我很抱歉。

4 个答案:

答案 0 :(得分:1)

  1. 你写的是“setCookies(...)”,但它的“setCookie”没有“s”。
  2. 您进行无限循环,因为您替换了“alert(...)”本机函数并在此函数中调用alert()。 执行架构:alert()> loadalert()> alert()> loadalert()>等...

    重命名您的功能。

  3. 您没有定义“once_per_session”变量。
  4. 的Javascript

    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();
    

    http://jsbin.com/ucipom/2/edit

答案 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)。

的Javascript

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