@Andrey_87

Почему дублируется событие popstate?

Сколько раз нажимаешь на кнопку, такое количество и выводиться событий если нажать кнопку "назад" (одинаковых).
Подскажите почему дублируется событие popstate?

let updatestateSMlistPage;
	smfiltersbuttonEl = document.querySelector('#button_smfilters');
	orderchangeEl = document.querySelector('.change_order');
	
	updatestateSMlistPage = function(state) {
		if(!state) return;
		$('#panely3').load(state);
	}

	window.addEventListener('popstate', function(e) {
		console.log(e);
	});
	
	smfiltersbuttonEl.addEventListener('click', function(e) {
		let url = 'index.php?route=catalog/SMfilter_opt&token=<?php echo $token; ?>';
		let url_main_page = 'index.php?route=extension/module/SMfilter&token=<?php echo $token; ?>';
		let filter_url = '';
		let filter_name = $('input[name=\'filter_name\']').val();
		let filter_type = $('input[name=\'filter_type\']').val();
		let filter_category = $('select[name=\'filter_category\']').val();
		let filter_status = $('select[name=\'filter_status\']').val();
		let stateSMlistPage;

		if (filter_name) {
			filter_url += '&filter_name=' + encodeURIComponent(filter_name);
		}
		if (filter_type) {
			filter_url += '&filter_type=' + encodeURIComponent(filter_type);
		}
		if (filter_category != '*') {
			filter_url += '&filter_category=' + encodeURIComponent(filter_category);
		}
		if (filter_status != '*') {
			filter_url += '&filter_status=' + encodeURIComponent(filter_status);
		}
		if (filter_url != '') {
			stateSMlistPage = {page : url + filter_url};
			history.pushState(stateSMlistPage, "", url_main_page + filter_url);
		}
		updatestateSMlistPage(url + filter_url);
	});


Вот при нажатии 5 раз кнопки и после одного нажатия "назад"

611b7f67a753b498388336.jpeg

P.S. Заметил еще ньюанс, если после нажатия 5 раз на кнопку перезагрузить страницу, то все работает так как нужно по нажатию один раз "назад" один раз вызывается событие.
То есть скорее всего когда перегружается часть страницы $('#panely3').load(state); что то еще должно обновляться.
Только вот что?
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
@Andrey_87 Автор вопроса
Дело было в расположении скриптов. При вызове $('#panely3').load(state); подгружалась новый контент который содержал тот же самый скрипт.
Нужно было вынести
window.addEventListener('popstate', function(e) {
    console.log(e);
  });

за пределы div'a который обновляется с помощью $('#panely3').load(state)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы