Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как останавливать setInterval при закрытие всплывающего окна? JS

Давид Мейстер Мастер (2089), на голосовании 1 год назад
Есть вот такой код
 $(document).on("click", ".window-show", function () { 
window_name = $(this).data('name');
$.ajax({
type: "POST",
url: "/core/ajax.php",
data: {
do: "get_window",
window_name: window_name,
},
success: function (result) {
$('.modal__window').html(result)
}
});
});
 elseif ($_POST['do'] == 'get_window' && isset($_POST['window_name'])) { 
$window_name = $_POST['window_name'];
include __DIR__ . "/windows/{$window_name}/{$window_name}.php";
}
Который выполняет парсинг одного из окна на странице, т.е. все окна на сайте появляются из этого кода.

В одном из сплывающих окно есть у меня есть setInterval который при закрытие окна не останавливается,
 function timer(timer, second) { 
timer.html(format_time(second));
let interval = setInterval(function () {
if (timer.length > 0) {
--second;
timer.html(format_time(second));
} else {
clearInterval(interval);
}
}, 1000);
}
Я уже пробовал сверять length у timer при каждом интевале (timer по сути не существует т.к. окно было закрыто, а данные о нём удалены), пробовал обновлять данные с помощью data и сверять length, но всё это не работает, браузер как будто железобетонно кеширует этот тег и он как будто есть. Скажу больше даже когда я меняю html у timer и вывожу в консоль он тоже меняет.

Так вот, как останавливать setInterval при закрытие всплывающего окна?
Голосование за лучший ответ
Павел Просветленный (25620) 1 год назад
Это что за объект такой "timer"? jQuery объект? Что ты пытаешься получить свойством length? В jQuery, судя по документации, это количество элементов в объекте. В таком случае length всегда равен 1, если ты искал 1 тег. По логике в условии должен быть "second" а не "timer.length".

Вообще странно что ты аргумент назвал тем же именем что и функцию. Плохая практика как минимум потому что меня ввело в ступор что ты пытаешься вызвать .html() у функции. Код должен быть понятен окружающим. Наверно по этому тебе никто и не отвечает.
Давид МейстерМастер (2089) 1 год назад
Не всегда, если элемента 2 то length соответственно равен 2, если элемент не найдет то length равен 0. А также хочу добавить что проблему я уже решил
Павел Просветленный (25620) Давид Мейстер, да, действительно, я был не прав. Тебе не отвечают по совсем другой причине...
Похожие вопросы