- ベストアンサー
window.openした時、親ウィンドウのドキュメントがトップに戻る
リンク先を新しいウィンドウで表示させ、メニューとかステータスバーを非表示にさせるためwindow.openを使用しています。 上記のようにして、子画面を表示することは問題無く出来ているのですが、リンクボタンを押した親画面ドキュメントが、いわゆる「トップに戻る」ボタンを押したときのような動きをしてしまいます。 なんとか親画面側のこの「トップに戻る」動きをやめさせたいのですが、解決法はありますか? ソースは以下のようにしています。 <script language="javascript"> <!-- function openWin(url){ window.open(url, "newwin", "menubar=no,location=no,status=no"); } //--> </script> <a href="#" onclick='openWin("./test.html")'>テスト表示</a>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これは、onClick の処理が実行された後に、A タグ本来のジャンプ動作(ここでは href="#"、つまりページトップへのジャンプ)が行われるのが原因です。 JavaScriptが有効な場合のみ動作すればよいのであれば、 <a href="javascript:openWin('./test.html')">~</a> で解決できます。 しかし、普通はJavaScriptが有効でない環境のことも考慮して、A タグを <a href="./test.html" target="newwin" onClick="return openWin(this)">~</a> のようにし、また関数の方を function openWin(a) { window.open(a.href, a.target, "~"); return false; } のようにします。 こうすると、JavaScriptが有効でない場合は A タグの動作でページが開き、有効な場合は openWin() の動作でページが開きます。 ※1:onClick="~" の中で return を使うと、return の値が「真」の場合はタグの動作が実行され、「偽」の場合はタグの動作がキャンセルされます。 上の例ではこれを利用し、JavaScriptの有無に対応しているのです。 ※2:openWin() の呼び出しで引数になっている「this」は、この A タグ自身(を表すオブジェクト)のことです。 これを変数 a で受け取ったので、a.href や a.target で、A タグに書いてある内容を利用することができるのです。
その他の回答 (2)
- howsike
- ベストアンサー率58% (18/31)
#1の方と同じで a href="#" になってるからと思います。 次のように <a href="javascript:void(0);" onclick='openWin("./test.html")'>テスト表示</a> #をjavascript:void(0);に置き換えてはどうでしょうか?おそらく直ると思いますよ^^;
お礼
こちらでも解決できますね。 a href="javascript:void(0) と記述できるとは、知りませんでした。 回答ありがとうございました。
- shy00
- ベストアンサー率34% (2081/5977)
a href="#" になっているために、TOPに戻っています <a href="#" onclick='openWin("./test.html")'>テスト表示</a> の近くに<a name="***">というものを記載し <a href="#***" onclick='openWin("./test.html")'>テスト表示</a> にしてはいかがですか?
お礼
この方法は私も考えましたが、根本的な解決にはならないなと思ってやめました。(^^; 回答ありがとうございました。
お礼
回答ありがとうございました。 JavaScriptにはまだ慣れていないもので回答を見たときは「?」と思いましたが、なるほど実際やってみると分かってきます。 一応参考書も読んでいたのですが、このような方法は載っていませんでしたよ。さすが専門家の意見ですね。 今回はとても勉強になりました。 どうもありがとうございました。