Есть ли причина, по которой моя функция javascript запускается без вызова? - PullRequest
0 голосов
/ 16 ноября 2018

Я запускаю скрипт для проверки возраста пользователя. Функция, используемая для проверки наличия файлов 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 голосов
/ 16 ноября 2018

Вы должны сделать свою функцию анонимной (безымянной) функцией в последней строке.

Ваш код

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 пока не поддерживает функции "толстая стрелка" ;однако, если вам не нужна поддержка IE, вы можете использовать следующий код:

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

Демо

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...