Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.11.2018, 03:07
Аспирант
Отправить личное сообщение для Nik_Dev Посмотреть профиль Найти все сообщения от Nik_Dev
 
Регистрация: 26.12.2017
Сообщений: 30

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

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

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

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

Попап 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()
            });
        });
    });

}
Ответить с цитированием
  #2 (permalink)  
Старый 23.11.2018, 10:07
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

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

Идентификатор тега должен быть уникальным.
Вы либо на одну кнопку вешаете два обработчика, либо у вас две кнопки с одним идентификатором.
Ответить с цитированием
  #3 (permalink)  
Старый 23.11.2018, 14:20
Аспирант
Отправить личное сообщение для Nik_Dev Посмотреть профиль Найти все сообщения от Nik_Dev
 
Регистрация: 26.12.2017
Сообщений: 30

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

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

Добрый день.

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

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

Последний раз редактировалось Nik_Dev, 23.11.2018 в 14:23. Причина: Дополнил
Ответить с цитированием
  #4 (permalink)  
Старый 23.11.2018, 14:41
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Сообщение от Nik_Dev
Куки вешается на кнопку закрытия
в коде можете это показать?
Ответить с цитированием
  #5 (permalink)  
Старый 23.11.2018, 15:31
Аспирант
Отправить личное сообщение для Nik_Dev Посмотреть профиль Найти все сообщения от Nik_Dev
 
Регистрация: 26.12.2017
Сообщений: 30

Сообщение от Nexus Посмотреть сообщение
в коде можете это показать?
Кнопка закрытия
$(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()
            });
        });
    });
}

Последний раз редактировалось Nik_Dev, 23.11.2018 в 15:36.
Ответить с цитированием
  #6 (permalink)  
Старый 23.11.2018, 15:52
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

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

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

В вашем коде кукисы записываются только когда на document происходит (либо до него всплывает) событие mouseleave со свойством clientY имеющим отрицательное значение (это вообще возможно?).
При кликах на #close-popup кукисы не пишутся.
Ответить с цитированием
  #7 (permalink)  
Старый 23.11.2018, 15:57
Аспирант
Отправить личное сообщение для Nik_Dev Посмотреть профиль Найти все сообщения от Nik_Dev
 
Регистрация: 26.12.2017
Сообщений: 30

Сообщение от Nexus Посмотреть сообщение

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

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


Подскажите пожалуйста как записывать куки на mouseleave, только на каждый попап по отдельности, а не на 2 сразу.
Ответить с цитированием
  #8 (permalink)  
Старый 23.11.2018, 16:01
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

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

Последний раз редактировалось Nexus, 23.11.2018 в 16:04.
Ответить с цитированием
  #9 (permalink)  
Старый 23.11.2018, 18:03
Аспирант
Отправить личное сообщение для Nik_Dev Посмотреть профиль Найти все сообщения от Nik_Dev
 
Регистрация: 26.12.2017
Сообщений: 30

Сообщение от Nexus Посмотреть сообщение
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
Да, всё работает. Совместил со своим кодом, всё идеально.

Спасибо огромное
Ответить с цитированием
  #10 (permalink)  
Старый 23.11.2018, 20:28
Аспирант
Отправить личное сообщение для Nik_Dev Посмотреть профиль Найти все сообщения от Nik_Dev
 
Регистрация: 26.12.2017
Сообщений: 30

Сообщение от Nexus Посмотреть сообщение
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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью в getElementById("dt").value GVY Элементы интерфейса 8 25.11.2015 08:51
Проблема с записью в переменную _SR_71_ Общие вопросы Javascript 2 21.02.2013 01:39
ajax чат проблема с записью сообщения в базу данных mysql. Niksik AJAX и COMET 4 15.01.2012 14:04
Подключение куки.. Проблема.. Dorian_bs Общие вопросы Javascript 1 03.04.2011 13:17
Проблема с куки Uljanka Общие вопросы Javascript 18 02.03.2009 21:10