• ベストアンサー

フレームのランダム選択方法

ご質問させていただきます。 例えば、上下2分割になっていて、上のフレームがメニュー用のフレーム、 下のフレームが更に4分割だとして、メニュー(例えばBBS)をクリックすると、 下フレームのどれかに、クリックするたびに画面が表示されるようにしたいと思っています。 何かよい方法はございませんでしょうか? おわかりになるようでしたら、ご回答お願いいたします。

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

  • ベストアンサー
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.10

もしかしたらlocation.hrefでこけているのかも知れません。 まず、何処でエラーになっているのかを調べてください。 適当なところでalert()を入れてみて何処て落ちているのか確認してください。 <script language="javascript"> <!-- function test(page_url,kp_num){   var rdm,i;   alert("0");   do{     rdm = Math.floor(Math.random() * 4);     for(i=0;i < kp_num.length;i++)       if(kp_num[i] == rdm) break;   }while(i < kp_num.length)   alert("1");   switch(rdm){   case 0:     :     :   }   alert("2");   return rdm; } ↑このような感じで。 また、   top.a.location.href = page_url; をコメントにして変わりにalert()を出すなどしてみて下さい。 //  top.a.location.href = page_url;    alert("url1"); それと、今更ですが、プログラムを見やすくする為に左端に全角スペースを入れていますが、全角スペースは削除してください。    alert("url1"); ^^^^^^ ↑「^」この部分のことです。 もし、location.hrefでこけているようでしたら <BODY> ~ </BODY>のどこかに <form>タグを追加して、submit();で遷移するというのはどうでしょう? //  top.a.location.href = page_url;    document.form名.target = "a";    document.form名.action = page_url;    document.form名.submit(); このような感じになります。

seiji_a
質問者

お礼

sorarisp様 今週になってまで続いていまして、本当にどうもありがとうございます。 原因は、そのままコピペしていた私のせいです・・・。 おかげさまで無事にMacのIEでも動きました。 全角スペースが原因だったみたいです。 本当に本当にどうもありがとうございました!! また、何かの質問した際などにもどうぞよろしくお願いいたします!!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (9)

  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.9

すみません。勘違いをしていたようです。 MacにIE5.5は存在しないようですね。。。 確認したわけではありませんが。。 IEで動作しないのはどうも別の理由があるようです。 現在お使いのIEのバージョン等を教えていただけますか? それと、インターネットセキュリティのJavascriptが有効になっているのかを確認してみてください。

seiji_a
質問者

補足

sorarispさま 昨日から、↑に対してレス書いているのですが、何故かここで反映されません・・・。 環境ですが、MacのIE5.0です。 そして、インターネットセキュリティのjavascriptは有効になっております。 どうぞよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.8

rdm = Math.floor(Math.random() * 4); の変わりに var now_time = new Date().getMilliseconds(); rdm = now_time % 4; で乱数を取得するという事です。 <script language="javascript"> <!-- function test(page_url,kp_num){   var now_time;   var rdm,i;   do{     now_time = new Date().getMilliseconds();     rdm = now_time % 4;     for(i=0;i < kp_num.length;i++)       if(kp_num[i] == rdm) break;   }while(i < kp_num.length)   switch(rdm){   case 0:     top.a.location.href = page_url;     break;   case 1:     top.b.location.href = page_url;     break;   case 2:     top.c.location.href = page_url;     break;   case 3:     top.d.location.href = page_url;     break;   }   return rdm; }

seiji_a
質問者

補足

sorarispさま 何度もどうもありがとうございます。 早速、↑をコピペしてブラウザ動かしてみました。 winのIE、ネスケは何も問題は無く、Macのネスケが、ランダムになる時とならない時がある(これは無視するとして)、問題のMacのIEでは、前回同様動きませんでした・・・。 もう、これ以上の方法はありませんでしょうか?? これ以上の回避方法あるようでしたら、ご回答お願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.7

MacのIE5.5ですと、Mathオブジェクトが対応していないようです。 下記のURL参照 http://www.openspc2.org/JavaScript/ref2/math/math/ 対応策としまして、時間から乱数を取得するのはどうでしょう。 var now_time = new Date().getMilliseconds(); rdm = now_time % 4; このような感じです。 レスポンスは多少悪くなりますが、体感はないはずです。

seiji_a
質問者

補足

sorarispさま 何からなにまですみませんです・・・。 >MacのIE5.5ですと、Mathオブジェクトが対応していないようです。 なるほど、そうなのですか・・・。 同じIEなのだから同じ動きしてくれれば本当に良いのに・・・。 所で、↑の乱数の取得という事で、 下記のような感じで宜しいのでしょうか? とはいえ、単に、一番上に追記しただけなのですが・・・。 (ファイル名などは、今私が使おうとしているものです。) <script language="javascript"> <!-- function test(page_url,kp_num){ var now_time = new Date().getMilliseconds(); rdm = now_time % 4;   var rdm,i;   do{     rdm = Math.floor(Math.random() * 4);     for(i=0;i < kp_num.length;i++)       if(kp_num[i] == rdm) break;   }while(i < kp_num.length)   switch(rdm){   case 0:     top.a.location.href = page_url;     break;   case 1:     top.b.location.href = page_url;     break;   case 2:     top.c.location.href = page_url;     break;   case 3:     top.d.location.href = page_url;     break;   }   return rdm; } function test2(){   var kp_num = new Array(3);   var i;   for(i=0;i < 3;i++)     kp_num[i] = -1;   kp_num[0] = test('e.html',kp_num);   kp_num[1] = test('f.html',kp_num);   kp_num[2] = test('g.html',kp_num);   test('h.html',kp_num);   return 0; } //--> </script> 本当に申し訳ございませが、上記で違うようでしたら、 ご回答、度々ですがよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.6

>また、page_C.htmlの後の<br>は必要なのでしょうか? ああ、、すみません。<br>は起動テストしたときの名残です。 消し忘れていました。別に必要はありません。 >page_Cが配列要素の中に入ってないのは何故でしょうか? それは、最後のページでどのフレームが選択されても別に困らないだろうと思って省きました。 別にその後kp_num配列を参照する事もないので。。。 ですが、ソースを見やすくする為に   kp_num[2] = test('page_C.html',kp_num); としてもいいと思います。 その場合は   var kp_num = new Array(3); とするのを忘れないようにしてください。 >上フレームのメニューの部分も、0と言う数字が表示されてページが入れ替わってしまいます。 これは確証はないのですが、 <a href="javascript:test2()"> としているのではないでしょうか? この場合ですと、自ページでも画面遷移する為、0が表示され(何故?)てページが入れ替わる為だと思います。 対策として <a href="javascript:test2()" onClick="javascript:return test2()"> として、test2()で常に戻り値をfalseにすれば良いと思います。 これは、onCkickイベントでfalseを返す事により、ページ遷移処理をキャンセルしています。 これでだめでしたら、 <a href="javascript:void(0);" onClick="javascript:return test2()" onKeyPress="javascript:return test2()"> でも良いはずです。

seiji_a
質問者

補足

度々、本当にありがとうございます。 丁度、今、下のほうへ別の書き込みをしたのですが、 書き込み終わった後に、↑のご回答がありました。。。 タイミング悪くてすみませんです。 早速、やってみました。分かりやすいご回答どうもありがとうございます。 ↑に書いてあるとおりに、<a href="javascript:test2()"> としていました。 何とか、自力で出来ないかと、適当にいじり倒し、function test2()の一文の最後の、return 0; を消したら動いたのですが、それはきっと、良くないのですよね? 所で、今度こそ最後のご質問にしたいのですが、MacのIEで検証してみたところ、全く反応しませんでした。ネスケはOKだったのですけど・・・。 これの、回避策はありませんでしょうか? 実はそのサイトを見るユーザーのメインがMacのIEなのです・・・。 どうぞ、よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.5

>ランダムでかつ、複数枚のページを表示させることが出来ますでしょうか??? 一度のアクションで複数のフレームにそれぞれページの表示ができるかということですか? ↓つまり、こういう事ですか? <script language="javascript"> <!-- function test(page_url,kp_num){   var rdm,i;   do{     rdm = Math.floor(Math.random() * 4);     for(i=0;i < kp_num.length;i++)       if(kp_num[i] == rdm) break;   }while(i < kp_num.length)   switch(rdm){   case 0:     top.fr1.location.href = page_url;     break;   case 1:     top.fr2.location.href = page_url;     break;   case 2:     top.fr3.location.href = page_url;     break;   case 3:     top.fr4.location.href = page_url;     break;   }   return rdm; } function test2(){   var kp_num = new Array(2);   var i;   for(i=0;i < 2;i++)     kp_num[i] = -1;   kp_num[0] = test('page_A.html',kp_num);   kp_num[1] = test('page_B.html',kp_num);   test('page_C.html<br>',kp_num);   return 0; } //--> </script> この場合、test2を呼ぶ事でできます。 kp_num配列には前回表示されたフレームの番号を記録して 同フレームが選択されないようにしています。 (同じフレームに'page_A.html'、'page_B.html'、'page_C.html'が重なって表示されないようにしているわけです。)

seiji_a
質問者

補足

sorarispさん、ご回答どうもありがとうございます。 ものすごく近づきました。 ↑のご説明でお伺いしたいのですが、function test2()~の部分で、 page_A.htmlと、page_B.htmlは配列になっているのですが、page_Cが配列要素の中に入ってないのは何故でしょうか? また、page_C.htmlの後の<br>は必要なのでしょうか? それと、もうひとつ重大なところなのですが、上フレームのメニューの部分も、0と言う数字が表示されてページが入れ替わってしまいます。 これの回避方法ありましたら教えてください。 度々で、ややこしくて申し訳ございませんがどうぞよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.4

たびたびすみません。 よく見ると、他にも誤りが。。。 Math.floor(Math.random() * 4); で取得できるのは 0~3 の整数なんですよね。。 switch関数のcaseが1~4になってる。。。 ああっ!雑な回答ですみません! もうないでしょうね。。。

seiji_a
質問者

補足

sorarispさん、こんにちは。 どうもありがとうございました。 まさに、完璧に動きました。ものすごく感動です。 更に、ご質問させていただきたいのですが、ランダムでかつ、複数枚のページを表示させることが出来ますでしょうか??? もし、おわかりになるようでしたら、教えてください。 どうぞよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.3

先ほどの回答に一部誤りがありました。 var rdm = Math.floor(Math.random() * 4); 小数点以下を切り捨てるのを忘れていました。

seiji_a
質問者

補足

sorarispさん、何度もどうもありがとうございます。 この投稿を見ていただけるのを祈って書き込んでいます。 実は、マックのIEで確認したのですが、ランダムも、複数のランダムも動きません・・・。何か原因、回避方法おわかりにならないでしょうか?ちなみに、ネスケは大丈夫のようでした・・・。 本当に度々すみませんです・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.2

ランダム関数を使えばできると思います <script language="javascript"> <!-- function test(page_url){   var rdm = Math.random() * 4;   switch(rdm){   case 1:     top.fr1.location.href = page_url;     break;   case 2:     top.fr2.location.href = page_url;     break;   case 3:     top.fr3.location.href = page_url;     break;   case 4:     top.fr4.location.href = page_url;     break;   } } //--> </script> fr1~fr4は各フレーム名です。 page_urlには表示したいURLを渡します。 参考になれば幸いです。

全文を見る
すると、全ての回答が全文表示されます。
noname#1785
noname#1785
回答No.1

一枚のhtmlで、上下2分割の下4分割はできないってことですかね? だったらフレームの中にフレームを埋め込めば良いのではないですか? 上下2分割したフレームで上の部分をクリックしたら、下のフレームに4分割したフレームのファイルを呼び出します。 TOPのソース <frameset rows="100,*"> <frame src="top.html" name="top"> <frame src="buttom.html" name="buttom"> </frameset> buttom.htmlのソース <frameset cols="100,200,300,*"> <frame src="buttom1.html" name="fr1"> <frame src="buttom2.html" name="fr2"> <frame src="buttom3.html" name="fr3"> <frame src="buttom4.html" name="fr4"> </frameset> というような感じ。 ただ単に上のメニュー部分から、下の任意のフレームに表示したいということであれば、リンクを貼るとき等に、キチンとtargetを指定してやればいいだけです。 各々の<frame>に、名前がかぶらないようにname属性を付けてください。 例えば上記のような場合でtop.htmlから、 <a href="index.html" target="fr1"> とリンクをはれば、4つに別れている下のフレームの、一番左にindex.htmlを表示することができます。 数が増えるとややこしくなりますので、がんばってください。

seiji_a
質問者

補足

早速の回答ありがとうございます。 えっと、問題を読み直すと、全然説明不足でした・・・。 質問に書いてある、BBSをクリックすると、下の4つのフレーム(fr1~fr4とします。)のどれかにランダムに表示させたいのです。 ターゲットの指定をランダムにすると言えばいいのでしょうか? そのようなことは出来るのでしょうか??? 2度手間かと思うのですが、是非分かるようでしたら、教えていただきたいです。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 上のフレーム内のプルダウンメニューが下のフレームに隠れてしまい、困っています

    ホームページビルダーでホームページを作成しています。上下分割フレームの上のフレームで作成してあるプルダウンメニュー(レイアウト枠)を下のフレームに表示する方法を教えてください。フレーム境界線を上に上げていくと、プルダウンメニューが下のフレームに隠れてしまいます。よろしくお願いします。

  • indexをフレームにしたい

    今ビルダー6.5でHPを作ってます。HPは今まで何度も作ったことがありますが、いつもトップページに入り口を置いてました。 今回はトップページから直接メニューなどをフレームで表示したいと思い、「教えてgoo」の質問投稿のような形で分割して作成しました(まず上下で分割して、次に下のフレームを2分割)。しかし、一番上のフレームのみindexで他は違ってしまいます。ネットで検索してものの思うような解決方法が見つからず、何度も挑戦したものの一向に出来ません。保存する順番とかがあるのでしょうか? そもそもindexをフレームにすることは不可能なのでしょうか??それと、もし出来た場合フレームの枠の色を変えることは出来ますか? 質問ばかりですがご回答お願いします。

  • フレームについて

    今、HPを作っています。 それで、フレームで、上下に分けました。 そこまではよかったんです。 そして、上下で、7:3でわけ、下のフレームに メニューで、画像でリンクしています。 それで、ふつうのリンクなので、下のフレーム内で、移動してしますんですね(あたりまえですけど) それを、メニューは下でリンクを張って、上のページで、表示させる方法を教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • HTML
  • 3分割フレーム表示の2つのフレームをリンク後1つに

    こんにちは、お世話になります。 現在横に3分割のホームページを作成しております。 一番上のフレームにサイト名やカウンターを、 真ん中がメインのフレーム、 一番下がメニューのフレームなのですが、 メニューフレームにあるリンクをクリックした際に、 一番上と真ん中のフレームをひとつのフレームとして表示させることはできませんでしょうか? たんに一番上と真ん中のフレームに違うページを表示させる事は可能なのですが、それではフレームが3分割のままなので、一番下のフレームにあるリンクをクリックした際に、上2つのフレームがまとまりひとつになって欲しいのです。 また、フレームのことではないのですが、 サイトにアクセスする度に(自動でリロードさせその度でも構わないのですが)、 表示されている画像をランダムで切り替えることはでいないでしょうか? 当方のサーバーはCGI不可の為、javascript等でできないかなと思いまして。 説明がわかりづらくて申し訳ありません、カテもどこかわからなかったのでこちらにさせて頂きました。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • Dreamwewaver4 フレーム間のリンクについて

    Dreamweaver4でHPを作成しています。 上下二つのフレームに分けて、上はメニュー、下をコンテンツとして使っています。 例えば、メニューの中の”news”をクリックすると 上のフレームはそのままで、下のコンテンツにはフレームなしのnewsに関する情報がでます。 次に、メニューの中の”item”をクリックすると 上のフレームはそのままで、下のフレームに左右に分かれたフレームを表示させ(左はメニュー、右は画像) 左のメニューをクリックすると、右の画像が変わるページを作りたいのですが、 左のメニューをクリックすると画像が下フレームいっぱいに表示され、左のメニューが消えてしまいます。 ちなみにフォルダは分けていません。 それも関係あるのでしょうか? 分かりにくい説明ですみません。 タグ打ちとかわからないので、できればそれ以外の 方法でよろしくお願いします。

  • フレーム分割したページの表示で困っています。

    ホームページビルダー9でホームページを作成しています。 ページを上下に2分割して上のフレームにリンクメニューを、下のフレームにメニューのリンク先を表示するように作りました。 自分のデスクトップパソコンでは問題なく表示されているのですが、試しにB5サイズのノートパソコンで表示してみると、画面全体が表示されず、上のページのメニューボタンを表示しているところが下のフレームページで隠れてしまっているのです。 下フレームは属性で自動的にスクロールバーが出るように設定しているので問題ないのですが、上のメニューは「なし」に設定しています。 ※デザイン上、表示させたくないので。 ここからが質問です。 ページを表示させた時に、ページ全体のサイズを変えても上のメニューのフレームページが常に下のフレームページの上に来るように、つまり、上のメニューページのサイズは変わらないように固定させる方法(!?)を教えて下さい。 説明がへたで申し訳ないのですが、どうぞ宜しくお願いします。

  • フレームの重ね順?

    今ホームページを作成しているのですが、ちょっと教えていただきたいことがあります。 上下2分割のページで上フレームのメニューにカーソルを合わせるとその下の部分にポップアップメニューが出るページを作成したいのですが、上フレームの高さを固定するとポップアップメニューが下フレームの裏側に隠れてしまいます。 これを下フレームの前面に表示させるにはどうしたらよいのでしょうか。 文章が分かりづらいと思いますが、何卒よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • ホームページビルダーのフレームで・・・・

    上下のフレームを使ったホームページを作っています。 上にメニュー、下に内容が載っています。 メニュー項目は5つ程あり、 下のフレームがターゲットとなって他のページにリンクするようになっています。 そこで質問なんですが、5つあるメニュー項目は下のフレームの内容のタイトルになっているので、クリックをした時に下の内容に合っているメニュー項目だけ色を変えて表示したいのです。 どのように設定すれば良いですか?教えて下さい。

    • ベストアンサー
    • HTML
  • フレーム分割表示について

    現在、フレームを上下に分割し、検索結果を表示する画面を作成しています。 上のフレームの中でキーワードとサイトを指定して検索し、下のフレームではその検索結果を表示できるようにしたいのですが何度もしたのですが成功しません。どうすれば下のフレームの中に結果を表示できるようになるでしょうか?よろしくお願いします。

  • ホームページビルダーで、フレーム内へのリンクがわかりません

    ホームページビルダーv6.5を使用していますが、 フレームを2分割して、例えば、上下に分割して 上のフレーム内の選択メニュを押すと、下のフレームに リンクの結果を表示させたいのですが、 リンクの挿入画面で、【ターゲット】をクリックすると、 作成したフレーム名が出るような設定があったと思ったのですが 忘れてしまい、作成したフレーム名をターゲット選択時に 表示させる方法がわからずに、困っております。 お手数をお掛け致しますが、お教え頂ければ幸いです よろしくお願い致します

シェイクスピアは天才か?
このQ&Aのポイント
  • シェイクスピアが天才と言われる理由について疑問を抱いています。
  • 他の天才と比較してシェイクスピアの才能を評価することができません。
  • シェイクスピアの作品は人間の人生について多くを教えてくれますが、驚きや感動を与える部分は見当たりません。
回答を見る

専門家に質問してみよう