Почему не работает условие в javascript?

Здравствуйте. На сайте есть скрипт (в файле script.js), который показывает модальное окно при попытке пользователя закрыть страницу:
// функция возвращает cookie с именем name, если есть, если нет, то undefined    
function getCookie(name) {
    var matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ));
    return matches ? decodeURIComponent(matches[1]) : undefined;
}
// проверяем, есть ли у нас cookie, с которой мы не показываем окно и если нет, запускаем показ
var alertwin = getCookie("alertwin");
if (alertwin != "no") { 
    $(document).mouseleave(function(e){
        if (e.clientY < 0) {
            $(".exitblock").fadeIn("fast");    
            // записываем cookie на 1 день, с которой мы не показываем окно
            var date = new Date;
            date.setDate(date.getDate() + 1);    
            document.cookie = "alertwin=no; path=/; expires=" + date.toUTCString();       
        }    
    });
    $(document).click(function(e) {
        if (($(".exitblock").is(':visible')) && (!$(e.target).closest(".exitblock .modaltext").length)) {
            $(".exitblock").remove();
        }
    });  
}

Чтобы окно не выскакивало часто, устанавливаются куки. Но проблема в том, что модальное окно показывается постоянно при попытке закрыть страницу. При этом сами куки устанавливаются. В чём может быть проблема? Сайт натянут на WordPress, скрипты подключены нормально
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
V_A_B
@V_A_B
¯\_(ツ)_/¯
В чём может быть проблема?


в том, что Вы выполняете проверку(получаете куку) один раз после(в момент) загрузки страницы, а Вам надо при событиях.(при первой загрузки там будет пусто - undefined, согласно Вашему коду - самая первая строка)

Но проблема в том, что модальное окно показывается постоянно при попытке закрыть страницу. При этом сами куки устанавливаются.


а если страницу перезагрузить после установки куки?

з.ы

...
var alertwin = getCookie("alertwin");//при отсутствии куки тут пусто.
//значение легло при загрузке страницы
//значит после установки куки надо перезагрузить страницу, чтоб там что-то было
//либо сделать повторный запрос getCookie(name)
if (alertwin != "no") { 
    $(document).mouseleave(function(e){
        if (e.clientY < 0) {
...
_________________________________________________________________________
...
$(document).mouseleave(function(e){
	var alertwin = getCookie("alertwin");//получаем куку при каждом событии mouseleave
//при первом событии там пусто и код ниже отработает
//при повторном наведении там не пусто и код ниже не отработает
	if (alertwin != "no") {
...

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@RLeo777 Автор вопроса
Вот исправленный скрипт, но и он не работает
function getCookie(name) {
    var matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ));
    return matches ? decodeURIComponent(matches[1]) : undefined;
}
// проверяем, есть ли у нас cookie, с которой мы не показываем окно и если нет, запускаем показ
var alertwin = getCookie("alertwin");
if (alertwin != "no") { 
    $(document).mouseleave(function(e){
        if (e.clientY < 0) {
            $(".overlay_stop").fadeIn("fast");    
            // записываем cookie на 1 день, с которой мы не показываем окно
            var date = new Date;
            date.setDate(date.getDate() + 1);    
            document.cookie = "alertwin=no; path=/; expires=" + date.toUTCString();       
        } 
    });
}
$(document).mouseleave(function(e){
    var alertwin = getCookie("alertwin");
    if(alertwin != "no") {
        if (e.clientY < 0) {
            $(".overlay_stop").fadeIn("fast");    
            // записываем cookie на 1 день, с которой мы не показываем окно
            var date = new Date;
            date.setDate(date.getDate() + 1);    
            document.cookie = "alertwin=no; path=/; expires=" + date.toUTCString();       
        } 
    }
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы