Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 14.10.2013, 20:34
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

http://learn.javascript.ru/comparison
Цитата:
Значения null и undefined равны == друг другу и не равны чему бы то ни было ещё.
Это жёсткое правило буквально прописано в спецификации языка.
Как-то так предлагаю:
$(document).ready(function () {
	 if(!getCookie('iWas')) {
		setTimeout( function(){
			document.getElementById('popup').style.display='block';
			setCookie('iWas', 'here');
		} , 1000);
	};
});

функции getCookie и setCookie не расшифровываю для краткости. Можете написать свои, можете использовать эти, например http://learn.javascript.ru/cookie

Последний раз редактировалось BETEPAH, 14.10.2013 в 20:49.
Ответить с цитированием
  #12 (permalink)  
Старый 14.10.2013, 21:04
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Так и не пойму, зачем эти танцы с куками если есть серверный язык и сессия (читай сеанс)...
Ответить с цитированием
  #13 (permalink)  
Старый 14.10.2013, 22:05
Аспирант
Отправить личное сообщение для Round Посмотреть профиль Найти все сообщения от Round
 
Регистрация: 08.04.2012
Сообщений: 49

BETEPAH,

Спасибо за помощь, работает.

Все протестил и все отлично.

Но вылезла одна загвоздка. Все работает безупречно на локалхосте. А когда перенес на сервер, работать перестало.

Путем перебора 1000 отличий - нашел что на это как то влияет строчка которая подключается выше чем подключается jquery.cookies. Это строчка: <script type="text/javascript" async="" src="http://www.google-analytics.com/ga.js" style=""></script>

Может это быть причиной и какова природа этого?

Я вижу два варианта - как то перенести эту строчку ниже, или (чего не хочется) отказаться от этого аналитикса вообще.

Есть другие варианты?
Ответить с цитированием
  #14 (permalink)  
Старый 14.10.2013, 22:16
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Round,
сделайте на сервере тестовую страницу, на которой код будет работать неадекватно и дайте, пожалуйста, сюда ссылку.
Ответить с цитированием
  #15 (permalink)  
Старый 14.10.2013, 22:17
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+';path=/'+(c ? '; expires='+d.toUTCString() : '');else return false;}
 function getcookie(a) {var b = new RegExp(a+'=([^;]){1,}');var c = b.exec(document.cookie);if(c) c = c[0].split('=');else return false;return c[1] ? c[1] : false;}
//ставим кук на сессию
setcookie('first_visit',true);
var first_visit = getcookie('first_visit');
if(first_visit) alert('"first_visit" - Кук есть')


function setcookie(a,b,c) {if(c){var d = new Date();d.setTime(d.getTime()+c);}if(a && b) document.cookie = a+'='+b+';path=/'+(c ? '; expires='+d.toUTCString() : '');else return false;}
 function getcookie(a) {var b = new RegExp(a+'=([^;]){1,}');var c = b.exec(document.cookie);if(c) c = c[0].split('=');else return false;return c[1] ? c[1] : false;}
//Проверяем установленное предыдущим скриптом
var first_visit = getcookie('first_visit');
if(first_visit) alert('"first_visit" - Кук есть')
Ответить с цитированием
  #16 (permalink)  
Старый 16.10.2013, 08:50
Аспирант
Отправить личное сообщение для Round Посмотреть профиль Найти все сообщения от Round
 
Регистрация: 08.04.2012
Сообщений: 49

Deff,

Спасибо за ещё один вариант.

BETEPAH,

Вчера весь день возился с этим глюком. Перенести этот гугланалитикс не вышло и убрать его нельзя, он мне нужен.

В итоге, я поменял код обработки куков но результат остался тот же - на локалхосте работает, а на сервере глючит.

Вот ссылка на главную страницу, на которой этот попап: http://hostultimo.com/preview/c/oxen/

Возможно, можно какой то костыль поставить?

Сейчас попап появляется на пару секунд и пропадает, если зайти повторно.

Новый код выглядит вот так:

// 'Delete' cookie for testing
function deleteCookie()
{
if(typeof(Storage) !== "undefined"){
    sessionStorage.returnVisit = "false";
    console.log("sessionStorage set.");
}
else{
    setCookie("return_visit","false",1);
}
}

//W3 Schools setCookie function
function setCookie(c_name,value,exdays)
{
  var exdate=new Date();
  exdate.setDate(exdate.getDate() + exdays);
  var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
  document.cookie = c_name + "=" + c_value;
}

//W3 Schools getCookie function
function getCookie(c_name)
{
  var c_value = document.cookie;
  var c_start = c_value.indexOf(" " + c_name + "=");
  if (c_start == -1)
  {
    c_start = c_value.indexOf(c_name + "=");
  }
  if (c_start == -1)
  {
    c_value = null;
  }
  else
  {
    c_start = c_value.indexOf("=", c_start) + 1;
    var c_end = c_value.indexOf(";", c_start);
    if (c_end == -1)
    {
      c_end = c_value.length;
    }
  c_value = unescape(c_value.substring(c_start,c_end));
 }
return c_value;
}

//Check return_visit cookie on page load
function bodyOnload()
{
if(getCookie("return_visit") === 'true' || sessionStorage.returnVisit === "true"){
    //Do something if user has already visited page
            var test = document.getElementById("test");
    test.style.display = "none";
}
else
{
    if(typeof(Storage) !== "undefined"){
        sessionStorage.returnVisit = "true";
        console.log('Session Storage set.');
    }
    else{
        setCookie("return_visit","true",1);
    }
}
}


$(document).ready(function () {

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


А попап обернул ещё раз.

<div id="test">

<div id="parent_popup" class="popup-slider">
<div id="popup">

	<?php if(function_exists('show_flexslider_rotator')) echo show_flexslider_rotator( 'popup' );?>

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

  </div>
</div>

</div>

Последний раз редактировалось Round, 16.10.2013 в 08:58.
Ответить с цитированием
  #17 (permalink)  
Старый 16.10.2013, 10:09
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от Round
на локалхосте работает
Странно. Не понимаю, как может работать такой код:
// 'Delete' cookie for testing
function deleteCookie()
{
if(typeof(Storage) !== "undefined"){
    sessionStorage.returnVisit = "false";
    console.log("sessionStorage set.");
}
else{
    setCookie("return_visit","false",1);
}
}

//W3 Schools setCookie function
function setCookie(c_name,value,exdays)
{
  var exdate=new Date();
  exdate.setDate(exdate.getDate() + exdays);
  var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
  document.cookie = c_name + "=" + c_value;
}

//W3 Schools getCookie function
function getCookie(c_name)
{
  var c_value = document.cookie;
  var c_start = c_value.indexOf(" " + c_name + "=");
  if (c_start == -1)
  {
    c_start = c_value.indexOf(c_name + "=");
  }
  if (c_start == -1)
  {
    c_value = null;
  }
  else
  {
    c_start = c_value.indexOf("=", c_start) + 1;
    var c_end = c_value.indexOf(";", c_start);
    if (c_end == -1)
    {
      c_end = c_value.length;
    }
  c_value = unescape(c_value.substring(c_start,c_end));
 }
return c_value;
}

//Check return_visit cookie on page load
function bodyOnload()
{
if(getCookie("return_visit") === 'true' || sessionStorage.returnVisit === "true"){
    //Do something if user has already visited page
            var test = document.getElementById("test");
    test.style.display = "none";
}
else
{
    if(typeof(Storage) !== "undefined"){
        sessionStorage.returnVisit = "true";
        console.log('Session Storage set.');
    }
    else{
        setCookie("return_visit","true",1);
    }
}
}


$(document).ready(function () {

	var delay_popup = 1000;
	setTimeout("document.getElementById('parent_popup').style.display='block'", delay_popup);
	
 });
Во-первых, куки вы выставляете не сессионные, а на 1 день. Во-вторых, вы при загрузке страницы запускаете таймер, который через одну секунду должен показать попап, и тут же делаете проверку наличия куки? Зачем? Я же привел выше код. Сначала делайте проверку, а потом запускайте таймер попапа, если есть необходимость
Ответить с цитированием
  #18 (permalink)  
Старый 16.10.2013, 10:16
Аспирант
Отправить личное сообщение для Round Посмотреть профиль Найти все сообщения от Round
 
Регистрация: 08.04.2012
Сообщений: 49

Я согласен, с тем что там сейчас много каши... Но это пока что тестовый вариант и я его всячески мучаю, по этому там могут быть накладки. Все замечания по ошибкам я принимаю с благодарностью.

Да, и там ещё была кнопка которой я сбрасывал куки, что бы каждый раз не переоткрывать окно браузера.
Ответить с цитированием
  #19 (permalink)  
Старый 16.10.2013, 10:27
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от Round
Сейчас попап появляется на пару секунд и пропадает, если зайти повторно.
ну, правильно. Потому что сначала срабатывает $(document).ready(function (), в которой прописан запуск попапа через секунду, а затем, после загрузки всего содержимого страницы (включая картинки), срабатывает body.onload, в котором этот попап прикрывается.
Переделайте логику скрипта. Сделайте так, как я написал выше - сначала проверка, затем вызов
Ответить с цитированием
  #20 (permalink)  
Старый 16.10.2013, 10:50
Аспирант
Отправить личное сообщение для Round Посмотреть профиль Найти все сообщения от Round
 
Регистрация: 08.04.2012
Сообщений: 49

BETEPAH,

ага, я наверное перегрелся и протупил с этим моментом...

Цитата:
ну, правильно. Потому что сначала срабатывает $(document).ready(function (), в которой прописан запуск попапа через секунду, а затем, после загрузки всего содержимого страницы (включая картинки), срабатывает body.onload, в котором этот попап прикрывается.
Сейчас переделаю.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить выполняться обработчик после всех имеющихся обработчиков данного элемен Анатолий Саратовцев jQuery 2 08.10.2012 18:49
Выполнение проверки после наступления события juggalo Events/DOM/Window 6 06.10.2012 01:37
Как обратиться к элементу, который был добавлен после полной загрузки DOM? LysoSutriN jQuery 5 02.01.2012 16:59
Как вызвать событие после события определенного в onchange Наталья Events/DOM/Window 2 12.09.2009 13:51
Как передать элемент в функцию после createElement Oleg NT Общие вопросы Javascript 3 23.06.2008 02:11