Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Проблема с записью куки (https://javascript.ru/forum/library-toolkit-framework/75993-problema-s-zapisyu-kuki.html)

Nik_Dev 23.11.2018 03:07

Проблема с записью куки
 
Всем привет )
Ребят подскажите пожалуйста в чем проблема.
Желательно ткнуть носом и показать решение, буду признателен.

Есть два попап окна и оба с записью куки.
Когда закрываю первый попап и на него вешается куки, то он сразу вешается и на второй попап.

А нужно чтоб вешался только на тот, что был закрыт.

Подскажите пожалуйста.

Попап 1
// PopUp Landing
function getCookie(name) {
    var matches = document.cookie.match(new RegExp(
        "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ));
    return matches ? decodeURIComponent(matches[1]) : undefined;
}
var alertwin = getCookie("popup_landing");
if (alertwin != "no") {
    $(document).mouseleave(function(e){
        if (e.clientY < 0) {
            $(".exitblock").show(500);
            var date = new Date;
            date.setDate(date.getDate() + 1);
            document.cookie = "popup_landing=no; path=/; expires=" + date.toUTCString();
        }
    });
    $(document).click(function(e) {
        if (($(".exitblock").is(':visible')) && (!$(e.target).closest(".exitblock .modaltext").length)) {
            $(".exitblock").hide(500, function() {
                $(".exitblock").remove()
            });
        }
    });

    $(function(){
        $('#close-popup').click(function(){
            $(".exitblock").hide(500, function() {
                $(".exitblock").remove()
            });
        });
    });
}


Попап 2
// PopUp Form
function getCookie(name) {
    var matches = document.cookie.match(new RegExp(
        "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ));
    return matches ? decodeURIComponent(matches[1]) : undefined;
}

function writeCookie() {
var date = new Date;
    date.setDate(date.getDate() + 1);
    document.cookie = "popup_form=no; path=/; expires=" + date.toUTCString();
}

var alertwin = getCookie("popup_form");
if (alertwin != "no") {
    if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
            window.setTimeout(function() {
                if ($("#exitblock_form").is(':hidden')) {
                    $("#exitblock_form").show(500);
                }
                writeCookie();
            }, 300000);
    }
    $(document).mouseleave(function(e){
        if (e.clientY < 0) {
            $("#exitblock_form").show(500);
            writeCookie();
        }
    });
    $(document).click(function(e) {
        if (($("#exitblock_form").is(':visible')) && (!$(e.target).closest(".exitblock .modaltext").length)) {
            $("#exitblock_form").hide(500, function() {
                $("#exitblock_form").remove()
            });
        }
    });

    $(function(){
        $('#close-popup').click(function(){
            $("#exitblock_form").hide(500, function() {
                $("#exitblock_form").remove()
            });
        });
    });

}

Nexus 23.11.2018 10:07

Без литра не разберешь...
Зачем вам на одной странице дважды объявлять функцию "getCookie"?
Где у вас вообще обрабатывается закрытие окна с записью куки?

Идентификатор тега должен быть уникальным.
Вы либо на одну кнопку вешаете два обработчика, либо у вас две кнопки с одним идентификатором.

Nik_Dev 23.11.2018 14:20

Цитата:

Сообщение от Nexus (Сообщение 499197)
Без литра не разберешь...
Зачем вам на одной странице дважды объявлять функцию "getCookie"?
Где у вас вообще обрабатывается закрытие окна с записью куки?

Идентификатор тега должен быть уникальным.
Вы либо на одну кнопку вешаете два обработчика, либо у вас две кнопки с одним идентификатором.


Добрый день.

Куки вешается на кнопку закрытия, либо же если закрыть за областью.
Первый попап тут https://molnimoney.top/
А второй тут https://molnimoney.top/profile/

У кнопок и у самих форм разный id.

Nexus 23.11.2018 14:41

Цитата:

Сообщение от Nik_Dev
Куки вешается на кнопку закрытия

в коде можете это показать?

Nik_Dev 23.11.2018 15:31

Цитата:

Сообщение от Nexus (Сообщение 499227)
в коде можете это показать?

Кнопка закрытия
$(function(){
        $('#close-popup').click(function(){
            $(".exitblock").hide(500, function() {
                $(".exitblock").remove()
            });
        });
    });





Запись куки на кнопку закрытия и на закрытие в не области.
// проверяем, есть ли у нас cookie, мы не показываем окно и если нет, запускаем показ
var alertwin = getCookie("popup_landing");
if (alertwin != "no") {
    $(document).mouseleave(function(e){
        if (e.clientY < 0) {
            $(".exitblock").show(500);
            // записываем cookie на 1 день, с которой мы не показываем окно
            var date = new Date;
            date.setDate(date.getDate() + 1);
            document.cookie = "popup_landing=no; path=/; expires=" + date.toUTCString();
        }
    });
// закрытие в не области
    $(document).click(function(e) {
        if (($(".exitblock").is(':visible')) && (!$(e.target).closest(".exitblock .modaltext").length)) {
            $(".exitblock").hide(500, function() {
                $(".exitblock").remove()
            });
        }
    });
// кнопка закрытия
    $(function(){
        $('#close-popup').click(function(){
            $(".exitblock").hide(500, function() {
                $(".exitblock").remove()
            });
        });
    });
}

Nexus 23.11.2018 15:52

Цитата:

Сообщение от Nik_Dev
Запись куки на кнопку закрытия и на закрытие в не области.

:blink:
Печеньки не записываются ни на кнопки, ни на области.
Не сношайте мозг, пожалуйста.

В вашем коде кукисы записываются только когда на document происходит (либо до него всплывает) событие mouseleave со свойством clientY имеющим отрицательное значение (это вообще возможно?).
При кликах на #close-popup кукисы не пишутся.

Nik_Dev 23.11.2018 15:57

Цитата:

Сообщение от Nexus (Сообщение 499242)
:blink:
Печеньки не записываются ни на кнопки, ни на области.
Не сношайте мозг, пожалуйста.

В вашем коде кукисы записываются только когда на document происходит (либо до него всплывает) событие mouseleave со свойством clientY имеющим отрицательное значение (это вообще возможно?).
При кликах на #close-popup кукисы не пишутся.

Прошу прощение, в js не силен.
Что смог собрать, то и собрал своими силами.


Подскажите пожалуйста как записывать куки на mouseleave, только на каждый попап по отдельности, а не на 2 сразу.

Nexus 23.11.2018 16:01

Nik_Dev, возможно вам нужно что-то такое:
function setCookie(name, value, days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }

    document.cookie = name + "=" + (value || "") + expires + "; path=/";
};

(function(cookieName) {
    if (document.cookie.indexOf(cookieName) >= 0)
        return;

    const hidePopup = function() {
        $(".exitblock").hide(500, function() {
            $(this).remove();
            setCookie(cookieName, 'no', 1);
        });
    };

    $('#close-popup').click(hidePopup);
    $(document).on('click', ':not(.exitblock .modaltext)', hidePopup);
})('popup_landing');//popup_landing на нужной странице заменить на popup_form

Nik_Dev 23.11.2018 18:03

Цитата:

Сообщение от Nexus (Сообщение 499245)
Nik_Dev, возможно вам нужно что-то такое:
function setCookie(name, value, days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }

    document.cookie = name + "=" + (value || "") + expires + "; path=/";
};

(function(cookieName) {
    if (document.cookie.indexOf(cookieName) >= 0)
        return;

    const hidePopup = function() {
        $(".exitblock").hide(500, function() {
            $(this).remove();
            setCookie(cookieName, 'no', 1);
        });
    };

    $('#close-popup').click(hidePopup);
    $(document).on('click', ':not(.exitblock .modaltext)', hidePopup);
})('popup_landing');//popup_landing на нужной странице заменить на popup_form

Да, всё работает. Совместил со своим кодом, всё идеально.

Спасибо огромное :thanks:

Nik_Dev 23.11.2018 20:28

Цитата:

Сообщение от Nexus (Сообщение 499245)
Nik_Dev, возможно вам нужно что-то такое:
function setCookie(name, value, days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }

    document.cookie = name + "=" + (value || "") + expires + "; path=/";
};

(function(cookieName) {
    if (document.cookie.indexOf(cookieName) >= 0)
        return;

    const hidePopup = function() {
        $(".exitblock").hide(500, function() {
            $(this).remove();
            setCookie(cookieName, 'no', 1);
        });
    };

    $('#close-popup').click(hidePopup);
    $(document).on('click', ':not(.exitblock .modaltext)', hidePopup);
})('popup_landing');//popup_landing на нужной странице заменить на popup_form


Только теперь попап исчезает даже если нажать на него, а не за его пределы.

То есть при нажатие на поле input или на кнопку submit.


Часовой пояс GMT +3, время: 20:47.