• ベストアンサー

JavaScript フレーム内のインラインフレームへのリンク

こんにちは JavaScriptを使って、セレクトメニューのリストから選択すると、同ページ内にあるインラインフレームにページが展開するようにしたいのですが行き詰ってしまったので質問させてください。 ・問題点 下記のようにJavaScriptの記述をしているのですが ブラウザで開いて見ると、「更新情報6月」などを選択しても、もともと開いているページが表示されたままで別のページが開きません。 ・ファイル構成 index.html(フレームセット)  -menu.html(フレーム名 menu)  -main.html(フレーム名 main)  new.html(indexを開いた時に表示されているページ)  new6.html(更新情報6月をクリックすると開いてほしいページ)  new5.html(更新情報5月をクリックすると開いてほしいページ) main.htmlの中にインラインフレーム(name=myNew) とセレクトメニューがあります。 こちらの過去ログを見たりして記述することが出来たのですが、main.htmlを単体で開いた場合は動作してindex.htmlで開いた場合は動作しないようなのです 「parent.myNew.」がいけないのかなと思うのですが JavaScriptの細かいことが分からないので どうしたら良いのか・・・ parentを消したり、thisにしたりしてみたんですが うまくいきませんでした。 どなたかアドバイスをお願いいたします ----- 記述内 ------------ <select onChange="parent.myNew.location.href=this.options[this.selectedIndex].value"> <option value="" selected></option> <option value=new6.html>更新情報6月</option> <option value=new5.html>更新情報5月</option> </select> <iframe src="new.html" name="myNew" width="250" height="400"></iframe>

  • RH01
  • お礼率92% (86/93)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

window.self.myNew.location.href=this.options[this.selectedIndex].value これで充分だと思います。 object window :ウインドウオブジェクト(ウインドウやフレームの総称)を示す。 object window.parent :ウインドウ内のフレームの親フレーム。親がいない場合は自分自身を示す。 object window.self :現在のウインドウ自身。(既定値と思われる) object window.top :一番手前(トップ)にあるウインドウ。 object window.self.location :アドレス(URL)に関する情報を持つ。 string window.self.location.href :URL。 object window.self.document :表示している文書自体を示す。 object window.self.document.all() このドキュメント中のすべてのエレメントを参照する。 [注意:document.all() は、IE4 以降やOperaは対応。Mozillaなどは対応していない。] object window.self.document.getElementById() :id 属性で指定した名前で要素を参照する。 [注意:やはり一部のブラウザのみ対応。] array window.self.document.layers :layerに関する情報を提供したり、操作を行うオブジェクト。 [注意:ネスケおりじなる・・・。] よってこれらは、 if(window.self.document.getElementById){ }else if(window.self.document.all){ }else if(window.self.document.layers){ }; と存在チェックをして振り分けをしてそれぞれを用いるべきです。 出来たらこれを関数として用意しておくと便利です。 理想はそれぞれ存在チェックをして処理を振り分けですが、そこまでする必要があるのかはよく判りません。 まぁ知識の上ではそれが理想で 現実では最初に提示した方法だけでも充分かと・・・。

RH01
質問者

お礼

とても詳しい解説ありがとうございます! まさに必要十分です。 ターゲットブラウザがIE、ネスケ、FireFoxなので いろいろ試しても全部で動作するものが なかったのですが、教えていただいた記述で 全部動きました 全部最新バージョンしか確認していませんが・・・ 正直細かく説明していただいた部分はチンプンカンプンだったのですが、一言コメントがとてもわかりやすかったです ありがとうございました!

その他の回答 (2)

  • m035
  • ベストアンサー率44% (38/86)
回答No.2

>「<select onChange="parent.myNew.location~」の「parent.myNew.location」 >という部分を、以下のいずれかにしてみてはどうでしょう。 >●document.all.myNew.location >●myNew.location >●document.getElementById('myNew').location アドバイス(と、言うか意見): document.all.myNew.locationは特定のIE専用なので避けたほうが無難です。 myNew.locationは一番どの環境でも動くと思われがちですが、 document.myNew.locationとしたほうがよいです。 document.getElementById('myNew').locationは最近のブラウザしか使えませんので避けたほうがいいです。 結論:onChange="document.myNew.location.href=this.options[this.selectedIndex].value" 説明(?): documentはそのHTMLファイルのbodyを表す、と理解するのかよいかと。 つまり、ウィンドウを親とするのではなく、 そのHTMLファイルを親とした親子関係をつかって オブジェクトにアクセスするのが最適ということです。 (ただしこれは同一HTMLファイル内でのアクセスに限る) よく分からない説明でしたが参考URLを見てもらえば分かるかもしれません。

参考URL:
http://www.rfs.jp/sitebuilder/javascript/01/03.html
RH01
質問者

お礼

アドバイスありがとうございます 各記述の意味やブラウザのことまで教えていただいて とても助かりました。 参考URLもよく読んでみたいと思います! もっと一つ一つの記述の意味を理解したら いろんなことが出来て楽しそうです

  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

「<select onChange="parent.myNew.location~」の「parent.myNew.location」という部分を、以下のいずれかにしてみてはどうでしょう。 ●document.all.myNew.location ●myNew.location ●document.getElementById('myNew').location parentというのは親つまり一つ上のフレームまたはウィンドウを指します。myNewが存在するのは親でなく自分自身なのに、親であるindex.htmlの中のmyNew、という指定になってしまいます。 main.htmlを単体で開いた場合は、親がいない→parentは自分を指す、ので動作したのだと思います。

RH01
質問者

お礼

早速の回答ありがとうございました。 やはりフレーム内にあるからいけなかったのですね 丁寧な解説でとてもわかりやすかったです。 ありがとうございました!

関連するQ&A

  • JAVASCRIPT等での フレーム間の リンクについて。

    いつも、お世話になっております。 現在、フレームを使ったホームページを作成中です。 左側に目次のようなフレームをつくり、JAVA Scriptを使って、ドロップダウンメニューで、項目を選択が出来る状態にして、選択をした場合、その項目ページを親フレームに表示したいのですが、JAVA SCRIPTの使い方が よくわかっていない為、どうしても、左側のページに、リンクさせたいページが 現れてしまいます。 もしも、親フレームに飛ばす事が出来なければ、新しいフレーム、または、ウィンドウ表示を解除してもいいと思っているのですが、どなたか、お分かりになる方、教えて下さい。御願い致します。  この場合、 <script Language="JavaScript"><!-- function popJump(selOBJ) { n = selOBJ.selectedIndex; location.href = selOBJ.options[n].value; }<target=_blank> // --></script> </head> <body bgcolor=aquamarine> <form> <select onChange="popJump(this)"> <option value="飛びたい項目のページ.html"> …… どこに、target="_parent"を挿入すれば 宜しいのでしょうか。 いろいろと試したのですが、間違っていますと言う風に デバッグ表示がでてきます。 ちなみに、HTMLを使っている所は、ちゃんと、親フレームに飛んでくれている状態です。 もしも、JAVA SCRIPTを使わないで、ドロップダウンで、項目を5つほど選べる状態にできるならば、他の言語でも、OKですので、宜しく御願い致します。

  • セレクトメニューでリンクの際、targetの指定の方法

    2つのフレーム(上下)で分けたページで、上(top)・下(bottom)というフレーム名にしています。 上(top)にセレクトメニューを設置しリンクをはって、下(bottom)にhtmlを表示したいのですが、target="bottom"というのは、どこに入れたらいいのか。。。いろいろやってみたのですが、全く分かりません。 お分かりになる方、どうぞ教えて下さい。よろしくお願いいたします。 <SCRIPT type="text/JavaScript"> <!-- function moveUrl(selection){ var url=selection[selection.selectedIndex].value; if(url!=""){ location.href=url; } } //--> </SCRIPT> <FORM><SELECT onChange="moveUrl(this)"> <OPTION value="" selected">メニュー選択 </OPTION> <OPTION value="main1.html">概要 </OPTION> <OPTION value="main2.html">仕組み </OPTION>

  • フレーム

    <select onchange="location.href=this.options[this.selectedIndex].value"> <option value=""> <option value="http~">A <option value="http~">B <option value="http~">C </select> のスクロールでリンクしているページを、違うフレーム(Dとする)に表示させたいのですが、 <select onchange="location.href=this.options[this.selectedIndex].value"> <option value=""> <option value="http~"target="D">A <option value="http~"target="D">B <option value="http~"target="D">C </select> としても、現在のフレーム内にしか表示されません。 どうやればDに表示できますか?説明が下手ですいません。

  • フレームを使用した複数プルダウンメニュー

    こんにちは。 よくある質問もみたのですが「複数のプルダウンメニュー」「フレームを使ったプルダウン」というのはあるのですが、 フレームを使用して左フレームに複数プルダウン、そこで選んだものを右フレームに表示させるというのが見つかりませんでした。 「複数のプルダウンメニュー」もつくれますし、「別フレームに表示させる」こともできるのですが、 プルダウンを増やしたとたんに動きません。 ネームを変えてもみたのですがうまくいきません。 フレームを二つつくって <FRAMESET cols="35%,65%"> <FRAME src="n_menu.htm" name="manu">←こっちにプルダウンメニュー <FRAME src="n_main.htm"name="main">←こっちに表示 目次のhtmファイルで <SCRIPT LANGUAGE="JavaScript"> function openPage() { var list = document.forms[0].urlList; parent.frames[1].location = list.options[list.selectedIndex].value; } </SCRIPT> </HEAD> <FORM> <SELECT NAME="urlList" onChange="openPage()"> <OPTION SELECTED VALUE="cover1.htm">朝の歌 <OPTION VALUE="1.htm">1番目のページ <OPTION VALUE="2.htm">2番目のページ <OPTION VALUE="3.htm">3番目のページ </SELECT> </FORM> #上記をコピペして増やしてみた↓ <FORM> <SELECT NAME="urlList2" onChange="openPage()"> <OPTION SELECTED VALUE="cover2.htm">夜の歌 <OPTION VALUE="4.htm">4番目のページ <OPTION VALUE="5.htm">5番目のページ <OPTION VALUE="6.htm">6番目のページ </SELECT> </FORM> これだと2本目が表示されません。 どうすればいいか教えていただけないでしょうか?

  • Javascript

    Javascript に関する質問です。 HTML にプルダウンメニューを設置し各ページに飛ばす際に、 別ウィンドウを開かせるようにするにはどうすればよいのでしょうか? 下記は Dreamweaver MX がはき出した Javascript です。 当方 Javascript に関してはほとんど素人です。どこに何を、どう書き換えてやればいいのか、どうか教えてください。 【Javascript】 <script language="JavaScript" type="text/JavaScript"> function MM_jumpMenu(targ,selObj,restore){ //v3.0 eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'"); if (restore) selObj.selectedIndex=0; } </script> 【HTML側】 <select onchange="MM_jumpMenu('parent',this,0)" name=menu1> <option selected>-- 選択して下さい --</option> <option value="../1.html">home1</option> <option value="../2.html">home2</option> <option value="../3.html">home3</option> <option value="../4.html">home4</option> </select>

  • ジャンプメニューの表示を初期値に戻したい

    左フレーム(frame name="menu")にジャンプメニューを5個つけて、右フレーム(frame name="main")にジャンプ先が表示されるページで、 ジャンプしてもフレームセットは解除せずに target="main"で表示させます。 ジャンプ後にジャンプメニューの表示を初期値(<option selected>の部分)に戻したいのですがどう記述すればいいですか? 現在のスクリプトは以下の通りです。以下のものに付け足す形で記述したいです。 ●スクリプト部分 function go (_url) { if (_url == "--") { return; } else { form1.target="main"; form1.action = _url; form1.submit(); } } <select onChange="go(this.options[this.selectedIndex].value)"> ●フォーム部分 <select onChange="go(this.options[this.selectedIndex].value)" name="select1"> <option value="--" selected>Select Menu</option> <option value="sample1.htm">サンプル1</option> <option value="sample2.htm">サンプル2</option> </select> 以上です。

  • プルダウンメニューの選択時のリンク先について

    「プルダウンメニューから選択すると、別ページにリンク」するページを 作成したいです。 以下の様に途中まではできたのですが、 「フレームを使わず、同じウインドウの別の箇所にリンク先を表示  ※プルダウンメニューはそのまま表示」 がどうしてもできません。xmlで作成している関係上、phpも使えません。 何か方法はありませんでしょうか。 <SCRIPT LANGUAGE="JavaScript"> <!-- function menuLink(linkLoc) { if(linkLoc !="") {window.aaa.location.href=linkLoc;} } //--> </SCRIPT> <form> <SELECT onChange="menuLink(this.options[this.selectedIndex].value)"> <OPTION SELECTED>Select</OPTION> <OPTION value="">××</OPTION> <OPTION value="">●●</OPTION> </SELECT> </form>

  • フレームを使ったプルダウンメニュー

    フレームで「ヘッダー・左メニュー・右メインページ」というように3分割にし、左メニューに置いたプルダウンから項目を選ぶと右メインに表示される、という構造にしたいと思っています。 <HEAD>~</HEAD>内↓ <script language="JavaScript"> function jump(form) { var myindex=form.destination.selectedIndex window.open(form.destination.options[myindex].value, target="main"); } //--> </SCRIPT> プルダウン部分↓ <FORM NAME="form"> <SELECT NAME="destination"> <OPTION VALUE="a.html" SELECTED>あ</OPTION> <OPTION VALUE="k.html">か</OPTION> <OPTION VALUE="s.html">さ</OPTION> <OPTION VALUE="t.html">た</OPTION> <OPTION VALUE="n.html">な</OPTION> </SELECT> <INPUT TYPE="image" SRC="go.gif" onClick="jump(this.form)" BORDER="0"> </FORM> という様に記述した所、例えばプルダウンで「た」を選択した場合、右フレームにちゃんとt.htmlが表示されるのですが、左フレームのプルダウンの項目が「あ」に戻ってしまいます。「た」を選択した状態のまま残したいのですが。 ちなみにボタンに画像を使わず、<INPUT TYPE="button" ・・・・>にするとなぜか「た」選択の状態でちゃんと残ります。でも、できれば画像を使いたいのです。 うまいやり方をご存じの方は、教えていただけますか。おねがいします。

  • [JavaScript+<select>]最初から5文字一致でセレクト状態にしたい。

    こんばんは。 HTMLとJavaScriptで簡単な動的ページを作成しています。 そこで、行き詰っていることがありますのでご相談を・・・。 こういう<SELECT>があるとします・・・。 <FORM name="myform"> <SELECT name="menu"> <OPTION value="item1001">メニュー1</OPTION> <OPTION value="item2001">メニュー2</OPTION> </SELECT> </FORM> 初期値を「メニュー2」にしたい場合・・・これをJavaScriptで指定する場合、ONLOADのタイミングで・・・ document.myform.menu.value = "item2001"; とすればいけます。 今回は・・・"item2"だけの情報でヒットさせたいと思っています。 つまり、optionのvalue値の頭から5桁だけのマッチングでセレクト状態にさせたいのです。 ループという形をとらずにセレクトさせる方法を探しています。 テクニックをご教授下さい・・・。 宜しくお願い致します。

  • JavaScriptのプルダウン

    プルダウンメニューの中から選択したページへジャンプするようにしたいのですがわからないところがあるので教えてください。 TOPページはframesetでmenu、TOP2の上下に分かれています。プルダウンメニューはmenuのページに置き、選択したページを表示するのは下のTOP2の部分に表示させたいんです。 下記のように記述したのですがこのままだとジャンプしたページはmenuに表示されてしまいます。 -------------------- <script Language="JavaScript"> <!-- function popJump(selOBJ) { n = selOBJ.selectedIndex; location.href = selOBJ.options[n].value; } // --> </script> </head> <body> <form> <select onChange="popJump(this)"> <option value="#">選択して下さい <option value="top2.htm">トップページ <option value="A.htm">A <option value="B.htm">B </select> </form> -------------------- <option value="A.htm">のところでTOP2へジャンプするように指定するのだと思うのですが その方法がいろいろ調べてみたのですがわかりません。 わかる方、アドバイスをお願いします。

専門家に質問してみよう