【问题标题】:One-time alert keeps executing一次性警报持续执行
【发布时间】:2013-12-08 23:58:12
【问题描述】:

我试图在用户访问网站时获得一次性提醒,然后放置一个 cookie,这样他们就不会在每次返回该网站时都对它感到厌烦。 cookie 已保存并且警报正在执行,但它继续执行,我正在撕毁我的头发。

我尝试了很多在网络上找到的东西(StackExchange,我多么爱你),但似乎都没有用。这是当前状态:

<script>
    function setCookie(name, value, days)
    {
      if (days)
      {
        var date = new Date();
        date.setTime(date.getTime()+days*24*60*60*1000);
        var expires = "; expires=" + date.toGMTString();
      }
      else
        var expires = "";
      document.cookie = name+"=" + value+expires + ";path=/";
    }
</script>

<body>
    <script type="text/javascript">
        if(!setCookie('testcookie')) {
           alert("hello world");
           setCookie('testcookie','1',3);
        }
    </script>
</body>

查看cookie记录,似乎每次都在设置。如果我在脚本中更改到期日期,它每次都会在开发控制台中更改。不确定这是否表明存在问题。

===== 结束解决方案 ======

我错过了 getCookie 调用。我还意识到,当尝试将其添加到头脚本时,执行需要是它自己的函数 * facepalm *.我还将所有脚本添加到标题中,而是在正文标记中调用该函数。

<head>
    <script>
        function setCookie(name, value, days) {
            if (days) {
                var date = new Date();
                date.setTime(date.getTime()+days*24*60*60*1000);
                var expires = "; expires=" + date.toGMTString();
            }   
            else 
                var expires = "";
                document.cookie = name+"=" + value+expires + ";path=/";
        }

        var getCookie = function (c_name) {
            var i, x, y, ARRcookies = document.cookie.split(";");
            for (i = 0; i < ARRcookies.length; i++) {
                x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
                y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
                x = x.replace(/^\s+|\s+$/g, "");
                if (x == c_name) {
                    return unescape(y);
                }
            }
        };

        function checkCookie() {
            if(!getCookie('testcookie2')) {
                alert("hello world");
                setCookie('testcookie2','1',3);
            }
        }
    </script>
</head>
<body onload="checkCookie()">
</body>

TA-DA!

【问题讨论】:

  • 您总是在设置 cookie,但没有查询任何现有的 cookie。
  • ftr w3schools 有很多不良信息,包括看似不错的不良信息,请勿将其视为可靠来源。
  • 是的,我发现这是一个很好的起点,但他们通常会忽略对学习产生巨大影响的小细节,或者没有足够多的示例来实际帮助解决您的问题.不过,这个论坛已被证明是无价的!​​span>

标签: javascript cookies setcookie


【解决方案1】:

我有时会使用一些 javascript 函数来检索 cookie

var getCookie = function (c_name) {
    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
            return unescape(y);
        }
    }
};

您可以将其与其他逻辑结合使用

if(!getCookie('testcookie')) {
    alert("hello world");
    setCookie('testcookie','1',3);
}

【讨论】:

  • 我想我还应该提一下,我从 w3Schools 网站获得了这个功能:w3schools.com/js/js_cookies.asp。还有 setCookie()、getCookie() 和 checkCookie() 的示例函数。
  • 谢谢,这帮助我几乎到达那里。我对 w3Schools 示例的问题是它添加了一个值(用户名)并检查两者。但我的警报将只是一个“好的”框,因此没有任何检查价值。当我删除那个位时,cookie 似乎没有设置。使用我原来的!getCookie 函数似乎也不起作用。在这种情况下,它每次都会设置。
  • 没关系,我明白了!对于那些需要更准确答案的人,我将使用最终解决方案更新我的问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多