Проблема в том, что вы звоните toggleDivOnMobile
, который вызывается при каждом изменении размера окна.Присоединяя ваши обработчики событий внутри этой функции, вы в конечном итоге получаете несколько обработчиков событий, которые пытаются сделать одно и то же, и они начинают бороться друг с другом.
Решением будет установка некоторой внешней переменной и толькоподключите слушателей событий один раз, например, так:
var isMobile = false;
$(document).ready(function() {
toggleDivOnMobile();
handleWindowResize();
window.addEventListener('resize', function() {
handleWindowResize();
});
});
function handleWindowResize() {
isMobile = window.outerWidth <= 768;
}
function toggleDivOnMobile() {
$('.par-title--collapsible').click(function(e) {
e.preventDefault();
var currentAttrValue = $(this).attr('href');
var content = $(currentAttrValue);
if (isMobile) {
content.slideToggle("slow");
}
});
return false;
}
Есть много других способов сделать это, но это только начало.Вы также можете обратиться к функции jQuery .off
, если хотите динамически добавлять и удалять прослушиватели событий в зависимости от размера окна, но я бы не рекомендовал это.
РЕДАКТИРОВАТЬ
Вы также можете разместить проверку isMobile
во внешней функции и вызвать ее при загрузке страницы;мобильный браузер (или любой другой браузер на самом деле) не будет инициировать событие изменения размера, если браузер фактически не изменен.
РЕДАКТИРОВАТЬ 2
Обновлен код для запроса OP ввключить вызов изменения размера при загрузке.