Предотвращение поведения хэша по умолчанию при загрузке страницы

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

Итак:

  • pageA ссылки на страницуB: <a href="pageB.php#Tab4">Go</a>
  • pageB открывается, и мой jQuery активирует правильную вкладку, но браузер прокручивается вниз до места, где <div id="Tab4"> находится на странице.

Именно это я хочу предотвратить.

Любые идеи? Спасибо!

Ответ 1

Невозможно предотвратить поведение хэша по умолчанию, но вы можете изменить свою схему хэширования, так что #tag не соответствует ни одному идентификатору на вашей странице. На загрузке страницы возьмите значение хэша и добавьте константу (ex: _hash), затем прокрутите ее до тех пор, пока не будет использоваться jQuery.

Пример: http://mysite/page.php#tab4

page.php имеет <div id="tab4_hash"></div>

Загрузите страницу, получите div, выполнив tab4 + _hash

Ответ 2

Я бы использовал это:

window.scrollTo(0,0);

Таким образом вам не нужно менять идентификатор элемента или что-то еще.

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

if(document.location.hash)
{
    window.location = document.location.hash;
}

инструкция "if" здесь обязательна или вы можете получить бесконечный цикл

Ответ 3

После того, как вы закончите загрузку правой вкладки, запустите это:

window.location = '#';