我的javascript函数被运行而没有被调用是有原因的吗?

时间:2018-11-15 21:35:59

标签: javascript jquery cookies

我正在运行脚本来验证用户年龄。用于检查Cookie的功能在用户第一次访问页面时起作用,如果用户没有请求的Cookie,则会重定向到使用年龄验证的首页。

一旦发生这种情况,该cookie实际上是在重定向上创建的,此时用户可以转到站点的任何子页面。谁能指出为什么会这样?

    //Setting The Value Of The Cookie
    var this_cookies_value = "_addMeToTheBrowser_";

    //Checks page on load to see if this_cookies_value already exists
    function checkForOurCookiesValue() {
    var allTheCookies = document.cookie;
    var _this_Host_Name_ = '"' + window.location.hostname + '"';
    var _this_Path_Name = window.location.pathname;

    console.log(allTheCookies);

    if(allTheCookies.includes(this_cookies_value) || _this_Path_Name == "/") {
    console.log("WORKING");
    } else {
    window.location.replace(_this_Host_Name_);
    };

    }
    checkForOurCookiesValue();


    //If cookie does not exist, this script will run once users age is verified correctly
    function createCookie(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=/";
    return true;
    }
    //Creating the cookie
    jQuery(".the_btn").on("click", createCookie("_my_domain_", this_cookies_value, 1));`enter code here`

1 个答案:

答案 0 :(得分:1)

您需要在最后一行中将函数设为匿名(无名)函数。

您的代码

jQuery(".the_btn")
  .on(
    "click",
    createCookie("_my_domain_", this_cookies_value, 1)
  );

正确的代码

jQuery(".the_btn")
  .on(
    "click",
    function() {
      createCookie("_my_domain_", this_cookies_value, 1)
    }
  );

浏览器读取您的代码时,会将createCookie()视为函数调用,需要立即运行。如果将其放在匿名函数中,则将不会调用该函数,而是会创建另一个函数,以便稍后由click事件调用。

考虑到您使用的是jQuery,我假设您需要完全的浏览器支持,并且IE尚不支持"fat arrow"函数;但是,如果不需要IE支持,则可以使用以下代码:

jQuery(".the_btn")
  .on(
    "click",
    () => createCookie("_my_domain_", this_cookies_value, 1)
  );

演示

https://jsfiddle.net/AnonymousSB/Lyn58bax/2/