Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как присвоить класс элементу после проверки cookies (https://javascript.ru/forum/jquery/42132-kak-prisvoit-klass-ehlementu-posle-proverki-cookies.html)

Round 14.10.2013 13:53

Как присвоить класс элементу после проверки cookies
 
Есть всплывающее окно, на главной, которое должно появляться лишь один раз за визит.

Вот разметка поп-апа:

<div id="popup">

	<!--  ЗДЕСЬ КОНТЕНТ POP-UP  -->

<a class="close_popup" title="Close" onclick="document.getElementById('popup').style.display='none';">CLOSE</a>


</div>


На этом поп-апе висит задержка, вот её код (на всякий случай):

var delay_popup = 1000;
setTimeout("document.getElementById('popup').style.display='block'", delay_popup);


Как сделать так что бы после нажатию на кнопку закрытия поп-ап (class="close_popup") больше не показывать это окно в течении текущего визита?

ksa 14.10.2013 14:16

Цитата:

Сообщение от Round
Как сделать так что бы после нажатию на кнопку закрытия поп-ап (class="close_popup") больше не показывать это окно в течении текущего визита?

Кто генерит ХТМЛ страниц?
Серверный язык какой?

Round 14.10.2013 14:45

Страницу рисует WP на php конечно же.

ksa 14.10.2013 16:25

Цитата:

Сообщение от Round
на php конечно же

Тогда просто в сессию запомни, что это уже было и потом генерить не нужно...

Round 14.10.2013 18:04

Тут наверное так не выйдет, по тому что этот блок поп-апа зашит в шаблон страницы и она генерируется каждый раз одинаковая.

Если я ошибаюсь скажите в чем.

Но мне кажется что здесь нужно примерно так:

1. проверить наличие куки (например такой: first_visit = false)

2. если она там есть, то скриптом назначить диву #popup . 'display' , 'none'

3. а если её там нет, то после загрузки страницы сработает таймер и покажет поп-ап.

4. тогда на нажатие кнопки class="close_popup" нужно повесить запись этой самой куки first_visit = false без указания времени, что бы она обнулилась по закрытии браузера.


Возможно я алгоритм скомкал, но примерно так.

Вопрос в том как это реализовать?

- Как на кнопку записать ещё одно действие с куками, кроме уже существующего там закрытия?
- Как после того как проверили наличие куки назначить стиль диву #popup . 'display' , 'none', что бы он стал важнее чем в таймере окна? Ведь там свой отсчет идет и 'display none' может стать 'block'.

Может есть проще решение и копаю не туда?

BETEPAH 14.10.2013 18:15

Цитата:

Сообщение от Round
Как на кнопку записать ещё одно действие с куками, кроме уже существующего там закрытия?

Вы можете записать сколько угодно действий на событие. После точки с запятой пишите следующее
Цитата:

Сообщение от Round
Как после того как проверили наличие куки назначить стиль диву #popup . 'display' , 'none', что бы он стал важнее чем в таймере окна? Ведь там свой отсчет идет и 'display none' может стать 'block'.

А не проще при наличии кукис очистить таймер (clearTimeout)? Или вообще изначально не выставлять таймер, если есть кукис

Round 14.10.2013 18:30

Цитата:

Сообщение от BETEPAH (Сообщение 276417)
Вы можете записать сколько угодно действий на событие. После точки с запятой пишите следующее

Я пробовал вот так:

<a class="close_popup" title="Close" onclick="document.getElementById('popup').style.display='none'; document.cookie = 'first_visit = false';">CLOSE</a>


Но, почему то кука записывается еще до того как открылось окно поп-апа.


Цитата:

Сообщение от BETEPAH (Сообщение 276417)
А не проще при наличии кукис очистить таймер (clearTimeout)? Или вообще изначально не выставлять таймер, если есть кукис

Таймер нужен на тот случай когда это первый визит. Если таймера нет, то сразу вылетает попап, даже не дав посетителю понять куда он попал. А так, перед всплытием попапа есть мгновение когда видно загрузившуюся страничку.

В данный момент я могу и обнулить таймер и\или обернуть этот весь блок ещё в один див ему назначить display=none. (как вариант)

Но все же первичный вопрос остается не раскрытым - если я правильно на кнопку повесил запись куки, то почему она записывается ещё до срабатывания события onclick на этой кнопке?

BETEPAH 14.10.2013 19:08

Цитата:

Сообщение от Round
Таймер нужен на тот случай когда это первый визит. Если таймера нет, то сразу вылетает попап, даже не дав посетителю понять куда он попал. А так, перед всплытием попапа есть мгновение когда видно загрузившуюся страничку.

Попробую на пальцах объяснить тогда :)
Цитата:

если (кукиса нет) {
ставим таймер на запуск попапа
записываем кукис
} иначе {
ничего не делаем и попап не появится
}
Почему записывается до срабатывания, из этого кода не видно. Наверное, где-то стоит запись в кукис

Round 14.10.2013 19:22

BETEPAH,

Спасибо за разжевывание, сейчас попробую.

А записи именно в этот кукис нет выше нигде, это же я ему имя дал и его же валуй записал, он нигде выше не может быть... с этим непонятно.

Round 14.10.2013 20:26

Что делаю не правильно?

alert( document.cookie );

$(document).ready(function () {
 if(cookie.get('first_visit') == null) {

	var delay_popup = 1000;
	setTimeout("document.getElementById('popup').style.display='block'", delay_popup);
	
	  };
 });


Почему не работает?
Консоль кричит, что кукис не найден - if(cookie.get('first_visit') == null) {

А алерт показывает что там есть этот кука.

Где ошибка?


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