Ошибка в консоли "Uncaught TypeError: Cannot read property 'top' of undefined"
Есть сайт на WP, разрабатывал его не я. В консоли на некоторых страницах появилась ошибка "Uncaught TypeError: Cannot read property 'top' of undefined". После анализа откуда это и из-за чего удалось выяснить, что ошибку дает эта строка var et = $('.catalog-list__load-more').offset().top; Класс .catalog-list__load-more это кнопка "Загрузить еще" на странице со списком товара, и получается если этой кнопки (соответственно и этого класса) на странице нету, то появляется такая ошибка. Код JS кто-то писал, как я понял для того чтобы получился Infinity Scroll, без нажатия на кнопку.
Вопрос: как избавиться од данной ошибки. Сделать Infinity Scroll другим способом не предлагать.
Уточнение: Infinity Scroll работает корректно, и на странице где он есть (.catalog-list__load-more) ошибка в консоли отсутствует.
Прилагаю полность код
var block_show = null;
function scrollTracking(){
var wt = $(window).scrollTop();
var wh = $(window).height();
var et = $('.catalog-list__load-more').offset().top;
var eh = $('.catalog-list__load-more').outerHeight();
if (wt + wh >= et && wt + wh - eh * 2 <= et + (wh - eh)){
if (block_show == null || block_show == false) {
//Блок active в области видимости
$('#ajaxwait').show();
filterPage++;
filter( true );
}
block_show = true;
} else {
if (block_show == null || block_show == true) {
//Блок active скрыт
}
block_show = false;
}
}
$(window).scroll(function () {
scrollTracking();
});
Ответы (1 шт):
Вы сами всё правильно написали. Если элемента нет, то и брать поле top не у кого. Есть несколько способов избавиться от ошибки.
Я предлагаю вам просто обернуть эту строчку в условие которое будет как раз таки проверять, а есть ли на текущей странице та самая кнопка "загрузить ещё" с необходимым классом и, если есть, тогда уже выполнять нужный код.
Навроде:
if ($('.catalog-list__load-more')) {
var et = $('.catalog-list__load-more').offset().top;
}
Такие дела. Вам нужно будет самостоятельно определить какой именно код выполнять по условию. Думаю идею вы поняли и дальше справитесь! Удачи :)