【问题标题】:Check cookie based on form submission根据表单提交检查 cookie
【发布时间】:2020-11-03 00:40:17
【问题描述】:

我在页面上有一个嵌入式表单。当页面加载时,它需要检查用户是否被 cookie。如果用户被 cookie,提醒他们。如果没有,请允许此人提交表单,然后对其进行 cookie。使用下面的代码,在页面加载时,用户会被 cookie 记录下来,并且总是看起来像返回用户,尽管只在提交时调用了 cookie 函数。

<body onLoad="checkCookieExists()">
<h1>Cookie test</h1>

<p>When the form loads, it will tell you if you've been here before based on the cookie.</p>

<form id="myForm" action="/">
  Enter name: <input type="text" name="fname">
  <input type="submit" value="Submit">
</form>
</body>

<script>
function checkCookieExists() {
      if (document.cookie.indexOf('front-row=submitted')== -1 ) {
       // New user
        alert("this is your first time");
          console.log("existcookienew");
    }
       else {
      // They've been here before.
        alert("hello again");

    }
}

document.getElementById("myForm").addEventListener("submit", checkCookie());

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 + ";path=/";
}

function checkCookie() {
     setCookie("front-row", "submitted", 30);
}

</script>
'''

【问题讨论】:

    标签: javascript html forms cookies


    【解决方案1】:

    首先要更正的是下面这个

    document.getElementById("myForm").addEventListener("submit", checkCookie);
    

    你应该给函数checkCookie,而不是函数调用checkCookie()的结果。

    版解释

    addEventListener 需要两个参数

    • 一个字符串作为事件类型
    • 作为“如何反应”的函数。

    checkCookie 是一个函数。 checkCookie() 是对函数的调用,等于函数的结果。

    所以如果你写

    document.getElementById("myForm").addEventListener("submit", checkCookie());
    

    这就像写作(在这种情况下)

    checkCookie();
    document.getElementById("myForm").addEventListener("submit", undefined);
    

    现在为什么在第一个错误解决后它不起作用?那么,checkCookie 是什么?只是阅读它......好吧,它设置了一个cookie。你为什么在那里写cookie?我想您想用服务器编写它。至少调用这个方法setCookie

    然后...然后...只需从头开始,迭代地擦除此代码。所有这些都非常不清楚,我真的怀疑它是否符合您的真正目标。

    【讨论】:

    • 你能解释一下在这种情况下 checkCookie 和 checkCookie() 最终结果的区别吗?当我进行更新时,它现在不会在提交时调用该函数。
    • 感谢您的进一步解释。最后一段让我有点困惑——什么是擦除我的代码并从头开始?在最终产品中,如果用户有 cookie,我将添加重定向而不是警报,因此他们将无法看到该页面两次。当我使用setCookie 而不是checkCookie 时,它会调用函数而不提交表单。另外,您提到我应该使用服务器编写 cookie。你能进一步解释一下吗?
    • 我通过更改函数名称让它工作。我不必更改功能或使用服务器编写 cookie。 document.getElementById("myForm").addEventListener("submit", checkCookie);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2015-11-07
    • 2011-12-31
    相关资源
    最近更新 更多