2009-04-21 15 views
1

"login"という名前のjQueryダイアログボックスにフォームがあります。 JavaScriptでは、URLに "#login"が含まれているかどうかを検出します。そうであれば、ログインダイアログボックスを表示します。 FF/Safari/Chromeでは正常に動作しますが、IE6/7では、ダイアログボックスが表示されたときにブラウザページがフォームの一番上にジャンプします。これが起こらないようにしたいと思います。ページロード時にブラウザが#nameにジャンプしないようにする

私はこのコード例を示します私の質問here、への答えのように見えたものが見つかりました:

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

私は「form.anchor」に「a.anchor」を変更しましたが、それは正しく動作しません。 。最初にmydomain /#loginをロードすると、IEはまだフォームの一番上にジャンプします。その後、ページを更新すると、ダイアログボックスが表示されますが、ジャンプしません。

IEがどのフォーム/アンカー名にジャンプするのをグローバルに防止するにはどうすればよいですか?

+1

ハッシュ記号を使用してドキュメント位置にジャンプする以外の機能を実装する特別な理由はありますか?私はそれが何のためのものなので、それが設計どおりに動作するときには不平を言わないでください。 :) – Tomalak

答えて

3

........あなたのコードに使用したくない名前のアンカーを入れないでください。

+0

フォームに正しく名前を付けて送信する必要があります。 – CMB

+0

なぜクエリパラメータを使用しないのですか? – harpo

+1

@CMB:フォームの名前を "loginForm"に変更します。これにより、#loginがスクロールしなくなります。または#loginを#showLoginに変更し、 "login"という名前のフォームを保持します。 –

4

page.html?showlogin = trueのようなクエリパラメータなどを使用することをおすすめします。 URLのpage.html#xxxxxは、ページ上のそのIDにブラウザをスクロールするためのものです。

http://www.w3schools.com/html/html_links.asp半属性が名前属性を説明しています。

そうしないと、ブラウザが行うべきことをやり遂げるために、面倒なハッキングが行われます。

0

この方法でハッシュマークを使用する正当な理由があります。 Ajaxianアプリケーションでは、ブラウザ履歴の管理に役立ちます。

IEを含むすべてのブラウザは、そのIDまたはNAMEを持つ任意の要素にジャンプするのを除いて、名前付きアンカーがない限り、location.hashを無視する必要があります。ですから、

<form id="login" ... 

あるいは

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

<form name="login" ... 

または

を持っている場合、従来のハッシュマークのように扱うとダウンジャンプするIEを引き起こすかもしれません。

関連する問題