Как избежать бесконечного цикла при переформатировании хэша url с помощью события Jquery 'hashchange'

Основа вопроса

Я настроил свою веб-страницу на использование идентификаторов с префиксом #s- для отличия якорных ссылок от других идентификаторов страницы. Префикс window.location.hash изменяется на хэш, который перемещает рамку к содержимому в фокусе, но также запускает слушателя hashchange, вызывая цикл.

Что я пробовал

У меня это работает для всех случаев, когда хэш изменился, но единственный случай, когда это не работает, это когда та же ссылка нажата (так как я использую это в условии, чтобы остановить бесконечный цикл). Код для этого был следующим:

$(window).on('hashchange', function(e) {
  if ($(location).attr('hash') != last_hash) {
    manageHash()
  }
});

Что я хочу

Я хотел бы найти условие или метод, позволяющий пользователям выбирать ссылку для изменения хэша, но также позволяющий им повторно выбирать ту же ссылку столько раз, сколько они хотят, не вызывая цикла.

JS

last_hash = ''

function manageHash() {
  var hash = $(location).attr('hash');
  if($('#s-'+hash.substring(1)) != 0 && '#s-'+hash.substring(1) != '#s-' ) {
    last_hash = hash
    window.location.hash = '#s-'+hash.substring(1); 
  }
}

$(window).on('hashchange', function(e) {
   if ($(location).attr('hash') != last_hash) {
      manageHash()
   }
});

$(document).ready(function() {
  manageHash()
})

HTML

<div class="contentSubSectionContainer contentSubSection" id="s-{{ subsection.slug }}">
  <h2 class="contentSubSectionFont1Bold">{{ subsection.sub_section_title }}:</h2>
  <div class="contentSubSectionContentFont1">
    {{ subsection.content_rendered|safe }}
  </div>
</div>
Вернуться на верх