ランダム表示とクリックで表示切替

このQ&Aのポイント
  • コンテンツの内容には、3つのカテゴリーがあり、カテゴリーごとに表示内容が違います。ボタン1~3でカテゴリーの切り替えをしたいという要望があります。
  • 実装したい機能は、毎回読み込み毎に、ランダムでカテゴリーを切り替えて表示したいのですが、それと同時に、ボタン1~3で、カテゴリーの切り替えをしたいというものです。
  • 現在の実装ではカテゴリーの切り替えとボタンのクリック処理がうまく行かないため、改善案を求めています。
回答を見る
  • ベストアンサー

ランダム表示とクリックで表示切替

はじめまして。 今回、以下のような点で頭を悩ませています。 どなたか良い方法を知っている方がいましたら、アドバイスを頂けたらと思います。宜しくお願いいたします。 以下のようなサイトを制作しています。 コンテンツの内容には、3つのカテゴリーがあり、 カテゴリーごとに表示内容が違います。 (レイアウトは同じです) --------------------------- ボタン1 ボタン2 ボタン3 コンテンツ1 ・ ・ コンテンツ2 --------------------------- ボタン1~3は、カテゴリー選択用のボタン。 コンテンツ1と2は、連動しており、 3つのカテゴリー毎に内容が変わります。 (カテゴリー1の場合、カテゴリー1用の内容のコンテンツ1とコンテンツ2があると言うことです。) 実装したい機能は、 毎回読み込み毎に、ランダムでカテゴリーを切り替えて表示したいのですが、 それと同時に、ボタン1~3で、カテゴリーの切り替えをしたいというものです。(ボタン1をクリックしたらカテゴリー1用のコンテンツ1とコンテンツ2に切り替わるようにしたいのです。) 自分がやったのは、 javascriptをOFFにしている人のために<noscript>タグを使いたいので、コンテンツ部分は、カスタム関数を呼び出すようにしています。 はじめに1~3の乱数を出し、 カスタム関数では、乱数によってカテゴリー毎のソースをdocument.writeするようにしていました。 コンテンツ1と2は、ソース的に場所が離れているため、 関数は、コンテンツ1用とコンテンツ2用を用意しました。 ですが、このやり方では、ボタンを押したときの処理ができなくなってしまいました。 どなたか、良い方法をお知りの方がいましたら、 アドバイスを宜しくお願いいたします。

  • F0X
  • お礼率50% (1/2)

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

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

案1 フレームを使い、htmlを呼び出す(私のやったのと同じ方法) 案2 フレームに対して、 top.フレーム名.document.writeln("ソース"); として書き込む。 案3 document.getElementById('divのid').innerHTML="ソース"; を使う。divタグなどに動的に書き込める。 リロードは必要ないが、onload後に書き込む必要がある。 <div id="hoge"></div>なら document.getElementById('hoge').innerHTML="ソース"; 案4 DOMを使う。 参考URLを見るとよいかも知れません。 案5 <div style="display:none" id="hoge"> <!--内容--> </div> としておき、 document.getElementById('hoge').display="block"; と document.getElementById('hoge').display="none"; で表示/非表示を切り替える。 メリット・デメリット 案1・2 ほぼどの環境でも動作。ただし、フレームに非対応のときどうするのかを除けば簡単かつ、使える方法。 案3 最近のIE/FireFoxやその他のブラウザで動くが、最近のものでも働かないものがあり、古いブラウザでも動かない。それほど難しくはない。 案4 詳しくないのでなんとも言えませんが、難しい。 案5 これが一番ベターかと思います。 といった感じです。 閲覧の対象と目的で選んでください。 ただし、書き出している内容が、タグを使用するものではなく、 単なる文章などの場合、textareaなどに書き込むほうが早いです。 これ以降に案5を使った場合を示します。 参考になれば幸いです。 <html> <head> <script type="text/javascript"> <!-- function ch(c_id,mode){ if(mode==1||document.getElementById(c_id).style.display=="block"){ document.getElementById(c_id).style.display="none"; } else{ document.getElementById(c_id).style.display="block"; } } function sw(a,b){ if(a==1){ ch('c1_1',1); ch('c1_2',1); ch('c1_3',1); } else{ ch('c2_1',1); ch('c2_2',1); ch('c2_3',1); } ch('c'+a+'_'+b,0) } function rand(){ ch("c1_"+(Math.floor(Math.random()*3)+1),0); ch("c2_"+(Math.floor(Math.random()*3)+1),0); } //--> </script> </head> <body> <script type="text/javascript"> <!-- var b1_1='<input type="button" value="カテゴリー1_1" onclick="sw(1,1)">'; var b1_2='<input type="button" value="カテゴリー1_2" onclick="sw(1,2)">'; var b1_3='<input type="button" value="カテゴリー1_3" onclick="sw(1,3)"><br>'; var b2_1='<input type="button" value="カテゴリー2_1" onclick="sw(2,1)">'; var b2_2='<input type="button" value="カテゴリー2_2" onclick="sw(2,2)">'; var b2_3='<input type="button" value="カテゴリー2_3" onclick="sw(2,3)"><br>'; var val1_1='<div id="c1_1" style="display:none">カテゴリー1の内容:カテゴリー1_1が表示されています。</div>'; var val1_2='<div id="c1_2" style="display:none">カテゴリー1の内容:カテゴリー1_2が表示されています。</div>'; var val1_3='<div id="c1_3" style="display:none">カテゴリー1の内容:カテゴリー1_3が表示されています。</div>'; var val2_1='<div id="c2_1" style="display:none">カテゴリー2の内容:カテゴリー2_1が表示されています。</div>'; var val2_2='<div id="c2_2" style="display:none">カテゴリー2の内容:カテゴリー2_2が表示されています。</div>'; var val2_3='<div id="c2_3" style="display:none">カテゴリー2の内容:カテゴリー2_3が表示されています。</div>'; document.write(b1_1+b1_2+b1_3+val1_1+val1_2+val1_3+b2_1+b2_2+b2_3+val2_1+val2_2+val2_3); rand(); //--> </script> <noscript> <a href="c1.html" target="ifra">カテゴリー1-1</a> <a href="c1.html" target="ifra">カテゴリー1-2</a> <a href="c2.html" target="ifra">カテゴリー1-3</a><br> <a href="c1.html" target="ifra">カテゴリー2-1</a> <a href="c1.html" target="ifra">カテゴリー2-2</a> <a href="c2.html" target="ifra">カテゴリー2-3</a><br> </noscript> </body> </html>

F0X
質問者

お礼

m035さん。 いろいろありがとうございました。 やはり、自分自身フレームを使えればと思っているのですが、フレームは使えないので、 案3~5のいずれかで都合の良いものを模索しています。 document.getElementById() という便利なものがあるのですね。勉強不足でした。 大変参考になりました。本当にありがとうございました。

その他の回答 (1)

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

これでどうでしょうか? カテゴリー1はc1.html、カテゴリー2はc2.htmlとしてあります。 JavaScriptOFF(ボタンの代わりにリンク)、iframe非対応の場合の対処(別ウィンドウで開く)済み。 <html> <head> <script type="text/javascript"> <!-- var ifra_no=0; function n_win(url){ window.open(url,"w1","");//window.open(url,target,option);optionは自分で設定してください。 } function ch(f){ if(ifra_no==1){ if(f==1){ n_win('c1.html'); } else{ n_win('c2.html'); } } else if(f==1){ document.getElementsByName('ifra')[0].src="c1.html"; } else{ document.getElementsByName('ifra')[0].src="c2.html"; } } function rand(){ if(!document.getElementsByName){ ifra_no=1; } for(i=0;i<Math.round(Math.random());i++){ ch(); } } //--> </script> </head> <body> <script type="text/javascript"> <!-- var b1='<input type="button" value="カテゴリー1" onclick="ch(1)">'; var b2='<input type="button" value="カテゴリー2" onclick="ch(2)">'; document.write(b1+b2); rand(); //--> </script> <noscript> <a href="c1.html" target="ifra">カテゴリー1</a> <a href="c2.html" target="ifra">カテゴリー2</a> </noscript> <br><br> <iframe src="c1.html" name="ifra" id="ifra" style="width:100%;height:90%;"> iframeに対応していないようなので、別ウィンドウにリンクは開かれます。 <script type="text/javascript"> <!-- ifra_no=1; //--> </script> </iframe> </body> </html>

F0X
質問者

補足

m035さん、丁寧なご解答ありがとうございます。 こちらの説明不足でした。 せっかく貴重なお時間を費やしていただいて申し訳ありません。 私が今やろうとしているのは、 1つのHTML内にある2箇所の表示部分をランダムで表示し、かつ、ボタン操作でもその2箇所の表示を切り替えることができるようにしたいのです。 さらに、その2箇所の内容は、カテゴリーによって連動するようにしたいのです。 3つのカテゴリーがあり、カテゴリー1に対するコンテンツ1とコンテンツ2。 カテゴリー2に対するコンテンツ1とコンテンツ2と言うような形です。 さらにこれらのコンテンツ部分はインラインフレーム、別窓などは使えないのです。 1枚のHTMLで、リロードのたびに、各カテゴリーに該当する2箇所の表示をランダムで切り替え、さらにボタンクリックでボタンに該当するカテゴリー用の表示(2箇所)に切り替えたいのです。 また、javascriptをoffにしているユーザに関しては、<noscript>タグで、カテゴリー1用の表示をする。 最初に私がしようとしたのは、以下のような感じです。 外部jsファイルです。 ///////////////////////////////////////////////// //0~2の乱数を変数randomFlgへ //この値によってカテゴリーを決定 randomFlg = Math.floor(Math.random()*3); //コンテンツ1部分*********************************** function random_contents1() { if(randomFlg == 0) {  //カテゴリー1表示 document.writeln('ソース'); document.writeln('ソース'); ・・・ } else if(randomFlg == 1) { //カテゴリー2表示 document.writeln('ソース'); document.writeln('ソース'); ・・・ } else if(randomFlg == 2) { //カテゴリー3表示 document.writeln('ソース'); document.writeln('ソース'); ・・・ } ////////////////////////////////////////////// これと同じような形でコンテンツ2部分を設定。 そしてhtml部分で コンテンツ1の部分に該当する箇所でrandom_contents1()を呼び出す。 同じようにコンテンツ2部分でコンテンツ2用の関数を呼び出す。 と言うようにしたのですが、 この段階で、ボタン操作を組み込めないことに気づき、困ってしまったのです。 (後のことを考えず初めてしまった自分が悪いのですが) 自分でもいろいろ模索しているのですが、どうもいい方法が思いつきません。 例えば、ボタンを押すことによって、リロードせずに該当箇所のソースを切り替えることはできないのでしょうか?(フォームのクリアボタンのように) もしくは、もっとスマートな別の方法があるのでしょうか? そもそもjavascriptでは、このようなことができないのでしょうか? 説明不足で申し訳ありませんでした。 これで伝わりますでしょうか? 宜しくお願いいたします。

関連するQ&A

  • バナー(javascript)をランダムで表示

    FC2ブログのプラグインにjavascriptを使ってバナー広告をランダムで表示しています。 今までは問題なかったのですが、新しくバナーを加えた際に、そのバナーがjavascriptで出来たものだったので、どうしてよいものかわからなくなってしまいました。 ランダム表示にはこちらのページを参考、というかコピーしました。 http://javascript.eweb-design.com/0616_ra.html 貼り付けたいバナーのソースです↓ ソースの改変は認められていません。 <!--- ---> <script type="text/javascript"><!--- ---></script> <script src='jsファイルのURL'></script> <noscript></noscript> <!--- ---> これ以外のバナーはgifとリンクで構成されていましたので特に問題ありませんでしたが、そこに上記のjavascriptバナーを加えてランダムに表示することはできますか? 自分で調べてみましたが、自力では見つけられなかったのでココで質問をする事にいたしました。 回答お願いします。

  • Excel で 10個のセルに、0から9を一つ一つランダムに表示したい

    子供の算数の問題を作成するために考えているのですが、Excel で10個のセルに、0から9を一つ一つランダムに表示したいのです。ただ、一度使用した数字は、二度と使用しないようにするためにいい方法はないでしょうか。 例1 2.5.8.6.3.9.7.4.1.0 例2 1.4.7.2.0.5.8.3.6.9 など、乱数等を使用した方がいいと思うのですが、if関数は、最大7つまでしか、判断だきないそうです。 ランダムであり、一度使用した数字は、使用せず、0から9をそれぞれ表示する方法は、ないでしょうか。 よろしくお願いします。

  • C++で画像を被らないようにランダムに表示

    初めまして。 現在、C++を勉強しているものです。 配列に収納された画像をランダムにpictureboxに表示させたいです。 しかし、ダブらないようにしたいです。 1枚だけならどこかでソースが載っていたのでそれをコピーしたらいいだけだと思うので問題はないのですが、3枚をランダム表示させ、なおかつ同じ物が表示しないようにしたいのです。 1枚目の画像が決定した後、それ以外の画像からランダムに選択。さらに1枚目・2枚目の画像が決定したらそれ以外の画像からランダムに選択。 初心者の案としては (1)重複なしの乱数を生成 (2)生成された数を配列と参照する (3)参照された画像をpictureboxに表示する こんな事が出来ますか? また、どうしたらいいのでしょうか? よろしくお願いします。

  • ランダムリンク(ランダム表示)の作成について

    初めて質問させていただきます。 自分のサイトにランダムリンク(ランダム表示)を設置しようと思いいろいろと調べてみたものの、 自分が必要としているものが見つかりませんでした。 以下が自分の希望するランダムリンクの形です。 (1)サイトのソース表示を見た場合、<a href="○○">××</a>のようなリンク形式で表示したい。 ⇒<script type ~></script> というふうに表示されないもの (2)テキストファイルなど、外部にリンク先のタグを挿入しておき、その中からランダムに表示されるようにしたい。 (3)phpで作成されたフリー配布されているものを使用させていただいたところ、うまく動かすことができませんでした。 ですので、php以外の形式のランダムリンクを希望いたします。 これらの条件にあてはまるランダムリンクの仕組み、サンプル、方法などをご存知の方はいらっしゃいませんでしょうか?? お手数ですが、よろしくお願いいたします。

    • 締切済み
    • CGI
  • Excelで文字列のランダム表示

    当方、Excelは簡単な関数を使うレベルです。 マクロはほとんど使用した事が無く、 VBAは使用したことがありません。 最終的な目標は 同一の問題に対して、回答はランダムな答えを選択を用意するという物です。 例えば A1に問題 A5-E5に  L1ーL40の一覧に用意した文字列をそれぞれランダムに入れるという形にしたいと思っています。 現状では答えがかぶってしまっても良いです。 最終的にはボタンで更新となれば理想です。 関数、マクロの使用、VBAの使用でも良いのですが、 できるだけ簡単な方法を探しています。 RAND関数・乱数生成など考えましたが、 考え方が間違っているのか、今の所上手く出来ません。 大変恐縮ですが、何を使用して行うのか、 また、手順を教えていただけると嬉しいです。

  • ランダム数をピックアップする方法

    いつもお世話になります。 このサイトで1から20までの中から重ならないように 3つ選ぶ問題で、以下のような説明を見つけたのですが、 どうしても、この通りにするコードが組めません。 先週の金曜日から考えているのですがどうしてもできません。 どなたか教えてください。 元の回答はここにあります。NO.1の方です。 http://okwave.jp/qa2035910.html ▽▽▽▽▽▽▽▽▽引用▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ Math.random()を使うと、0以上1未満の乱数が生成できます。 これを使って、 20*Math.random() とすると、0以上20未満になります。 20も含めたいので、これに1を足します。 20*Math.random() +1 これで出てきた数字を変数に入れておき、もう一回この関数を呼び出し、変数に入っている数が出てきたらもう一回呼び出します。 ユニークな乱数が3つ生成されたら、完了です。 コードは工夫してみてください。

  • 乱数の生成方法

    乱数を生成するソースコードを探しています rand関数で生成される乱数はよい乱数ではないようで それ以外でいい乱数を生成する方法はどのようなものがあるのでしょうか また、実装したソースコードのサンプルがあればWEBページなどを教えていただきたいです

  • オブジェクトのランダムな位置表示

    おそらくかなり初歩的な質問なのですが、ご存知の方がいらっしゃいましたらお答えいただけると非常に助かります。 現在Flash8を使用していて、ボタンを押す度にオブジェクトをランダムな位置に、ランダムなサイズで表示させるようなFlashを作っているのですがどうしても上手くいきません。ゴールとしては、オブジェクトの形を選択するボタンをステージに配置し、そのボタンを押す度に対応するオブジェクトを、ランダムな位置にランダムなサイズで表示させたいのです。 具体的には、以下のサイトのReqmtEをクリックして出るFlashと同じようなものを作りたいのですが、どなたかご教授願えませんでしょうか。 参考サイト: http://instruct.biz.uiowa.edu/courses/6M190/ygalusha/Homework4/ (↑ここのReqmtEというやつです)

    • ベストアンサー
    • Flash
  • ページ読み込み時ランダムで画像を切り替える!

    こんにちは。 http://hokuto.to/ 上記のサイトに「北斗占い」というコンテンツがあります。クリックするとページ読み込み時に画像をランダムに表示するというページに遷移するのですが、このページにおける画像の切り替え方が分からないのです。 通常、ランダムな画像切り替えはJavaScriptや、サーバサイドのプログラムで行うと思いますが、このページにはスクリプトタグやCGIなどのプログラムを実行している形跡が見つけられませんでした。 どのようにランダムな画像の表示を実装しているのでしょうか? どなたか御教示下さい。 宜しくお願いします。

    • ベストアンサー
    • HTML
  • long型のランダムな値を返す方法

    C言語について質問させて頂きます。 私は今、0以上50万以下(上限は50万以上ならどんな値でもかまいません)の範囲でランダムに整数を得たいと考えております。 #include <stdlib.h>のint rand(void)は0以上の乱数を返してくれますが、返す値はintの範囲内(?)なので、要望に合っておりません。 そこで、long型のランダムな値を得たいと思っております。 一体、どのような関数またはアルゴリズムを使えば、望むように出来るのでしょうか? 是非、お教えください。