2009-04-21 6 views
1

У меня есть форма в диалоговом окне jQuery с именем «login». В JavaScript я обнаруживаю, что «#login» находится в URL-адресе - если это так, он отображает диалоговое окно входа. В FF/Safari/Chrome он работает нормально, но в IE6/7 страница браузера переходит в верхнюю часть формы, когда отображается диалоговое окно. Я хотел бы предотвратить это.Остановить браузер от перехода на # имя при загрузке страницы

Я нашел то, что выглядело как ответ на мой вопрос here, который дает этот пример кода:

$('a.anchor').remove().prependTo('body'); 

Я изменил «a.anchor» на «form.anchor», но он не работает правильно , Когда я впервые загружаю mydomain/# login, IE все еще переходит к вершине формы. Затем, если я обновляю страницу, он снова отображает диалоговое окно, но не прыгает вниз.

Любая идея, как глобально просто запретить IE переходить на любые имена форм/якорей?

+1

Есть ли специальная причина, по которой вы используете знак хеша для реализации функциональности *, кроме * перехода к позиции документа? Я имею в виду ... Вот для чего он нужен, поэтому не жалуйтесь, когда он работает так, как он был разработан. :) – Tomalak

ответ

3

........ Не помещайте именованные якоря, которые вы не хотите использовать в своем коде?

+0

Форма должна иметь имя, чтобы оно могло быть отправлено правильно. – CMB

+0

Так почему бы не использовать параметр запроса? – harpo

+1

@CMB: измените имя формы на "loginForm", что должно остановить #login от прокрутки к ней. Или измените #login на #showLogin и сохраните форму с именем «login». –

4

Я бы рекомендовал использовать параметр запроса или что-то подобное, например page.html? Showlogin = true. Page.html # xxxxx в URL-адресе предназначен для прокрутки браузера к этому идентификатору на странице.

http://www.w3schools.com/html/html_links.asp halfway down объясняет атрибут имени.

В противном случае вы будете делать грязные хаки, чтобы обойти браузеры, делая то, что они должны делать.

0

Есть законные основания использовать метку хэша таким образом. В приложениях Ajaxian это может помочь управлять историей браузера.

Все браузеры, включая IE, должны игнорировать location.hash, если нет именованного якоря, за исключением того, что IE любит спрыгивать до любого элемента с этим идентификатором или NAME. Так что если у вас есть

<form name="login" ... 

или

<form id="login" ... 

или даже

<div id="login"><form name="somethingElse"... 

, что может привести к IE, чтобы рассматривать его как традиционный диез и прыгайте вниз.

Смежные вопросы