Как запускать только один on?

Есть on который слушает нажатия кнопок и изменение хеша в браузере. Поскольку при нажатии меняется и хеш выполняется другая функция. Как можно проверять если не нажата кнопка то выполнять только второй on?
Что я эти делаю? Первый on получает содержимое страницы при нажатии кнопки, а второй нужен для истории, если человек вернулся назад обработать и загрузить прошлое содержимое, в данном же случае выполняется 2 get запроса, от чего надо уйти.
$('body').on('click', 'a#ajax', function(){
			  flag = false;
			  var hash = $(this).attr('href').substr(1);
			  window.location.href = '#' + hash.substr(0, hash.length - 1)
			  setTimeout(function() { 
			  $('.content-wrapper').empty();
				  $.get('/' + hash, function(html){
						var doc = $(html);
						$('.content-wrapper').html(doc.find('.content-wrapper > *'));
				  });
			  }, 200);
			  return false;
		  });
	  
		  $(window).on('hashchange', function() {
			  var hash = window.location.hash.substr(1);
			  //window.location.href = '#' + hash.substr(0, hash.length - 1)
			  setTimeout(function() { 
			  $('.content-wrapper').empty();
			  $.get('/' + hash, function(html){
					var doc = $(html);
					$('.content-wrapper').html(doc.find('.content-wrapper > *'));
				});
			  }, 200);
		});
  • Вопрос задан
  • 375 просмотров
Решения вопроса 1
antoo
@antoo
Событие выполняется дважды: первый раз при клике, далее хеш меняется и срабатывает событие hashchange.
Так как код при клике аналогичен тому, что происходит при смене хеша, нет смысла его дублировать: можно полагаться только на событие и удалить в обработчике клика всё, что происходит после:
window.location.href = '#' + hash.substr(0, hash.length - 1);


Впрочем, простой клик по ссылке с якорем, который вы пытаетесь отловить, должен точно так же генерировать это событие, поэтому я вообще не вижу смысла в первом обработчике.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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