загрузка той же страницы с другим идентификатором фрагмента не приводит к перезагрузке страницы? - PullRequest
1 голос
/ 21 февраля 2011

В принципе, у меня есть несколько ссылок на страницу - index.html, они выглядят примерно так:

  <li><a href="index.html#0">test 0</a></li>
  <li><a href="index.html#1">test 1</a></li>
  <li><a href="index.html#2">test 2</a></li>
  <li><a href="index.html#3">test 3</a></li>

Я добавил в событие window.onload функцию, которая откроет окно предупреждения, содержащее идентификатор фрагмента, поэтому, если я нажму на первую ссылку, я должен получить окно предупреждения с «0» и т. Д.

Однако, я получаю окно с предупреждением только тогда, когда я получаю доступ к index.html из строки URL и нажимаю ввод. Когда я нажимаю на ссылки, окно предупреждения не появляется. Я думаю, это потому, что событие window.onload не вызывается ... Кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

Вам нужно window.onhashchange событие, которое срабатывает при привязке навигации. https://developer.mozilla.org/en/DOM/window.onhashchange Для неподдерживающих UA вам нужно обработать событие onclick на document.links и выяснить, указывает ли ссылка на правильный документ (то есть: только link.hash отличается от location.href)

2 голосов
/ 21 февраля 2011

Изменение фрагмента предназначено для перехода от раздела к разделу на определенной странице. Когда вы нажимаете одну из ваших ссылок, она просто меняет фрагмент, сама страница остается нетронутой. Поскольку страница не изменяется, событие загрузки страницы отсутствует, поэтому обработчик onload не вызывается.

Вам нужен обработчик onhashchange вместо обработчика onload. Однако следует помнить, что не все браузеры поддерживают onhashchange, поэтому для некоторых браузеров вам придется испортить версию, выпущенную вручную. Если вы делаете много такого рода вещей, то вы можете обратиться к Sammy или подобной библиотеке, чтобы позаботиться о деталях для вас.

...