Не срабатывает скрипт закрытия окна

12
Weblady
На сайте с 26.07.2011
Offline
141
462

На странице https://fantany.ru/poems/s-dnem-rozhdeniya-1-god-18-let

спустя 5 секунд появляется модальное окно.

Не срабатывает скрипт закрытия окна "Больше не показывать" (на другом сайте скрипт срабатывает).

Скрипт закрытия:

if(localStorage.getItem('todos')) {

$('.modal_social').html(localStorage.getItem('todos'));
}
else{
$(document).scroll(function(){
var topElement = $('.test').offset().top;
if($(window).scrollTop() >= topElement && $(window).scrollTop() <= topElement + 100){
if($('.modal_social .uscl-public_popup-not-show').hasClass('not_open')){
return;
}
else{$('.modal_social').fadeIn(1000);}
}
});
$('.modal_social .modal_social_content2 .close').click(function(){
$('.modal_social').fadeOut(500);
});
$('.modal_social .uscl-public_popup-not-show').click(function(){
$('.modal_social').fadeOut(500);
$(this).addClass('not_open');
var todos = $('.modal_social').html();
localStorage.setItem('todos', todos);
return false;
});
}

Помогите, пожалуйста.

Chkan
На сайте с 22.10.2008
Offline
104
#1

Код надо перенести в самый низ страницы, вот сюда вот примерно (1790 строка):

<script>

$(document).ready(function () {

});
</script>

смысл в том что jquery необходимый данному коду инициализируется как раз таки в подвале, а данный код отрабатывает раньше

🤠 Разработка/сопровождение проектов на Python/Django (https://django.ws)
Weblady
На сайте с 26.07.2011
Offline
141
#2

Chkan, добавила выше этого скрипта скрипт jquery, не срабатывает:(

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

Chkan
На сайте с 22.10.2008
Offline
104
#3

Вот такие там ошибки вижу:

Uncaught ReferenceError: jQuery is not defined

Uncaught ReferenceError: $ is not defined

попробуй вместо вот этого кода:

<script src="https://fantany.ru/assets/libs/jquery-migrate-3.0.0.min.js"></script>

поставить вот этот

<script

src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
Weblady
На сайте с 26.07.2011
Offline
141
#4

Chkan, поменяла, не выходит, не реагирует на закрытие "Больше не показывать".

Chkan
На сайте с 22.10.2008
Offline
104
#5

код замени на


$(document).scroll(function(){
var topElement = $('.test').offset().top;
if($(window).scrollTop() >= topElement && $(window).scrollTop() <= topElement + 100){
if($('.modal_social .uscl-public_popup-not-show').hasClass('not_open')){
return;
}
else{$('.modal_social').fadeIn(1000);}
}
});
$('.modal_social .modal_social_content2 .close').click(function(){
$('.modal_social').fadeOut(500);
});
$('.modal_social .uscl-public_popup-not-show').click(function(){
$('.modal_social').fadeOut(500);
$(this).addClass('not_open');
var todos = $('.modal_social').html();
localStorage.setItem('todos', todos);
return false;
});


---------- Добавлено 06.09.2019 в 18:12 ----------

но, не совсем понятно зачем нужен localStorage.getItem('todos') в изначальном коде, так что может что-то и отвалится, надо проверить весь функционал

хотя вероятней всего это тоже было с другого сайта копипастнуто?

Weblady
На сайте с 26.07.2011
Offline
141
#6

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

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

F2
На сайте с 08.08.2013
Offline
111
#7

У вас модалка показывается не тем кодом, который вы привели в стартпосте (точнее не только им) а еще и вот этим:


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

В приведенном вам коде была проверка на наличие объекта "todos" в локальном хранилище, который устанавливался по клику "больше не показывать". Вам, зачем-то, посоветовали эту проверку убрать.

Скорее нужно вернуть ваш начальный коди + модфицировать код вызова показа по таймауту как-то так


if(!localStorage.getItem('todos')) {
var delay_popup = 5000;
setTimeout("document.getElementById('overlay').style.display='block'", delay_popup);
}

⭐ ⭐ ⭐
Weblady
На сайте с 26.07.2011
Offline
141
#8

flacon2000, спасибо, но пока так же, срабатывает закрытие, но остается затемнение.

Chkan
На сайте с 22.10.2008
Offline
104
#9

вот такой код поставить надо:


$('.modal_social .modal_social_content2 .close').click(function(){
$('.modal_social').fadeOut(500);
$('#overlay').fadeOut(500);
});
$('.modal_social .uscl-public_popup-not-show').click(function(){
$('.modal_social').fadeOut(500);
$('#overlay').fadeOut(500);
$(this).addClass('not_open');
var todos = $('.modal_social').html();
localStorage.setItem('todos', todos);
return false;
});
F2
На сайте с 08.08.2013
Offline
111
#10
webledi:
flacon2000, спасибо, но пока так же, срабатывает закрытие, но остается затемнение.

Это уже вторая проблема. Скорее всего модификация предложенная Chkan должна помочь.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий