- ベストアンサー
【続】 ポップアップ表示の後のreturn false
http://oshiete1.goo.ne.jp/qa3050617.html でtalooさんにお返事をいただき、できた~!と書いて、 質問を締め切ってしまいましたが、talooさんが書いてくださっていた >あらかじめeventを渡す必要があります。 というのを見落としていました。ごめんなさい!! (T-T) うう、おっちょこちょいな自分を呪います。 IEでは、教えていただいたevent.preventDefaultを 第二引数を使わずに関数の中で使う方法でも、 希望通りの動作をしてくれました。 ですが、Mozillaではやはり小ウィンドウを出した後、 元のHTMLがページトップに戻ってしまいました。 もちろんMozillaでもtalooさんのおっしゃるように、 eventを第二引数としてhtml側から渡してやればOKでした。 逆に言えば、やはりHTML側の記述に変更を加えずに済む方法はない、ということなのでしょうか・・・? たびたびすいませんがよろしくお願いいたします。m(_ _)m
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは <script language="javascript"> <!-- function sWin(url) { window.open(url,"win","width=300px,height=300px"); } //--> </script> <a href="javascript:sWin('./popup.html')">link</a> これでどうですか?
その他の回答 (3)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
> 逆に言えば、やはりHTML側の記述に変更を加えずに済む方法はない、ということなのでしょうか・・・? <a href="#" onclick="sWin('popup.html')"> という記述の条件では私にはできません。 すでに試されていると思いますが、関数の中でwindow.eventを取得出来るのはIEだけで、 それ以外のブラウザではhref=""の動作を止めることは出来ませんでした。 > ちなみにhref="javascript:..."と書く方法は標準仕様に照らして、 > 現在も今後も推奨されているものなのでしょうか? JavaScriptが使えない環境を考慮し、推奨はされていないと思いますが、 その問題をクリア出来るなら、特に問題はないと思います。 たとえばJavaScript専用ページでJavaScriptを使えない場合を考える必要はないですしね。
お礼
talooさん、またまたご回答をいただき、ありがとうございます。 関数の中で“とりあえず簡単に”書く方法はなさそう、とわかってすごくスッキリしました。 まだページの公開までには時間があるので、最終的に talooさんのeventを第二引数で渡してやるか、 leap dayさんのjavascript:方式で書くか、 はたまたreturn falseにするか もうちょっと考えてみますね。 何度もとてもご親切に教えてくださり、ありがとうございました!
<html> <head> <title>target="_blank"</title> <script type="text/javascript"> document.onclick = target_blank; nwp={ "width" :"auto", //ウインドウ幅 auto:ブラウザ任せ "height" :"auto", //ウインドウ高さ auto:ブラウザ任せ "directories":1, //ディレクトリバー 1:表示 0:非表示 "location" :1, //ロケーションバー 1:表示 0:非表示 "menubar" :1, //メニューバー 1:表示 0:非表示 "scrollbars" :1, //スクロールバー 1:表示 0:非表示 "status" :1, //ステータスバー 1:表示 0:非表示 "toolbar" :1, //ツールバー 1:表示 0:非表示 "resizable" :1 //ウインドウサイズ変更 1:可 0:不可 } function target_blank(ev){ var ev = (ev) ? ev : event; var el = (ev.srcElement) ? ev.srcElement : ev.target; if(el.href){ var wo3a = ''; for(var i in nwp){ if(i == "resizable"){ wo3a += i + '=' + nwp[i]; }else if(i == "width"||i == "height"){ if(nwp[i] != "auto") wo3a += i + '=' + nwp[i] + ','; }else{ wo3a += i + '=' + nwp[i] + ','; } } var nw = window.open(el.href,"new",wo3a); if(!nw){ alert('ポップアップがブロックされました。\n現在のウインドウにリンク先を表示します。'); window.location = el.href; } } return false; } </script> </head> <body> <a href="http://www.google.co.jp/">google</a> <a href="http://www.yahoo.co.jp/ ">yahoo</a> <span>aaaa</span> </body> </html>
お礼
たくさんの行のコードを書いてくださり、本当にありがとうございます。 今回の質問でも前のURLの引用ではなく、ちゃんとその全文を書くべきでした。ごめんなさい。 全てのリンクやクリックに対してではなく、指定のリンクに対してのみ、 (1) <a href="#" onclick="sWin('./file.html')"> という形で小ウィンドウを開くfunctionを起動したいのです。 ちなみにsWin()の現在の中身は、全く問題なく小ウィンドウを表示し、 最後にfocusを与えているだけのごくシンプルなものです。 そしてこの時、 (2) <a href="#" onclick="sWin('./file.html'); return false;"> と同じ動作を、sWin()に記述を加えるだけでできたら、と考えました。 それだとfunctionだけを修正し、HTMLには一切変更を加えずに済むので、 大変ありがたいな、と・・・。 素人なので、何か簡単な方法があるのかな、と思ったのですが、 どうやらそう簡単ではないようですね。(T-T) やはり素直にreturn falseを一つ一つHTMLに書き足して行くか、 href="javascript:..."という書き方をさせていただくべきでしょうか・・・。 改めまして、return__さん、貴重なお時間をありがとうございました。m(_ _)m
<html> <head> <title>???<title> <script type="text/javascript"> <!-- function test(t){ alert(t); return false; } //--> </script> </head> <body> <a href="http://okwave.jp/" onclick="return test('AAA');">aaa</a> </body> </html>
お礼
お返事ありがとうございます。 私も最初は同じ発想になりましたが、 どうやらfunctionの中でのreturn falseと イベントハンドラの中でのreturn falseとは 意味合いが違うようで、これでは希望通りの動作にはなりませんでした。(T-T)
お礼
なるほど~。この書き方は見たことがありましたが、 実際には使ったことはありませんでした。 以前、学校でJavaScriptのコースを受講した際、 なぜ href="#" onclick="function()"のような 書き方をするかについて教わりました。 ステータスバーに別の仕掛けをしなくて済むので気に入っています。 ちなみにhref="javascript:..."と書く方法は標準仕様に照らして、 現在も今後も推奨されているものなのでしょうか? だとすればぜひこれを採用したいと思うのですが・・・。 W3Cなど?で自分でも調べてみたいと思います。ありがとうございました!