2009-04-21 6 views
1

J'ai un formulaire dans une boîte de dialogue jQuery nommée "login". En JavaScript, je détecte si "#login" se trouve dans l'URL - si c'est le cas, il affiche la boîte de dialogue de connexion. Dans FF/Safari/Chrome cela fonctionne très bien, mais dans IE6/7 la page du navigateur saute vers le haut du formulaire lorsque la boîte de dialogue est affichée. Je voudrais empêcher cela.Arrêter le navigateur de sauter à #name lorsque la page est chargée

J'ai trouvé ce qui ressemblait à une réponse à ma question here, qui donne ce code exemple:

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

J'ai changé « a.anchor » à « form.anchor », mais il ne fonctionne pas correctement . Quand je charge pour la première fois mydomain/# login IE saute toujours en haut du formulaire. Ensuite, si je rafraîchis la page, elle affiche de nouveau la boîte de dialogue mais ne saute pas vers le bas.

Une idée de comment globalement juste empêcher IE de sauter à tous les noms de formulaire/d'ancrage?

+1

Y a-t-il une raison particulière pour laquelle vous utilisez le signe dièse pour implémenter la fonctionnalité * autre que * passer à une position de document? Je veux dire ... C'est pour ça, alors ne te plains pas quand ça fonctionne comme prévu. :) – Tomalak

Répondre

3

........ ne mettez pas les ancres nommées que vous ne voulez pas utiliser dans votre code?

+0

Le formulaire doit avoir un nom afin qu'il puisse être soumis correctement. – CMB

+0

Alors pourquoi ne pas utiliser un paramètre de requête? – harpo

+1

@CMB: Changez le nom du formulaire en "loginForm", cela devrait arrêter #login de défiler vers lui. Ou changez #login en #showLogin et gardez le formulaire nommé "login". –

4

Je vous recommande d'utiliser un paramètre de requête ou quelque chose, comme page.html? Showlogin = true. Le page.html # xxxxx sur une URL est destiné à faire défiler le navigateur à cet ID sur la page.

http://www.w3schools.com/html/html_links.asp à mi-chemin explique l'attribut name. Sinon, vous allez faire quelques hacks désordonnés pour contourner les navigateurs en faisant ce qu'ils sont supposés faire.

0

Il existe des raisons légitimes d'utiliser la marque de hachage de cette façon. Dans les applications Ajaxian, il peut aider à gérer l'historique du navigateur.

Tous les navigateurs, y compris IE, devraient ignorer le fichier location.hash sauf s'il existe une ancre nommée - sauf qu'EI aime sauter vers n'importe quel élément avec cet ID ou NAME. Donc, si vous avez

<form name="login" ... 

ou

<form id="login" ... 

ou même

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

qui pourrait causer IE pour le traiter comme la marque de hachage traditionnelle et sauter.

Questions connexes