• ベストアンサー

プルダウンのリスト(リンクは不要)っぽいものを作りたいのですが

HPでキリ番をゲットした人の一覧をプルダウンでみれるようなリスト?を作りたいと思っています。 普通に<select>で作ってもよいのですが、キリ番は増えていくので外部ファイルで管理したいと思うのですがどうしたらよいのやら、、、 イメージとしては配列を使って追加していける感じなんですが??? //キリ番を獲得した人数の合計 var gokei=3; //キリ番を獲得した人の一覧の配列 var ichiran=new Array(); ichiran[0]="100番 花子さん"; ichiran[1]="111番 太郎さん"; ichiran[2]="123番 次郎さん"; こんな感じで後は合計人数に合わせて、配列を読み込んでリストに反映させて、、、とすればなんとなくできそうなできなさそうな。。。ここまでしかソースを考える事ができませんでした(汗) しかも逆順になるようにしたいのです。つまり一番上が123→111→100という感じに。 プルダウンにならなくてもコンパクトで且つワンクリックで一覧が見れる方法があれば何でも結構ですので教えて下さい。 よろしくお願い致します。<(_ _*)>

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

  • ベストアンサー
  • 665
  • ベストアンサー率72% (18/25)
回答No.1

逆順にしたいなら、 ループで配列の数値を1ずつ下げていけばいいです。 以下のコードをJSファイルとして保存し、 HTML文書の表示したい場所にscript要素を記述して 保存したJSファイルを読み込ませてください。 var ichiran = new Array( "100番 花子", "111番 太郎", "123番 次郎", "200番 三郎"); document.write("<select name=\"ichiran\">\n"); for (var i = ichiran.length - 1; i >= 0; i--) { document.write("<option>" + ichiran[i] + "</option>\n"); } document.write("</select>\n");

jamslot
質問者

お礼

ご回答ありがとうございます。 ご指導頂きまして、イメージしていた通りのソースとリストになりました!

その他の回答 (1)

回答No.2

実現方法は実にいろいろあります。 環境と知識によりいろいろ制限される事もありますが、 とにかく詰め込み理想系を考えると CGIでの対応が一番です。 完全にデータファイルを別管理出来ますし 閲覧者の環境に左右されません。 出来ればこちらをお勧めします。 その上で容易で動的な実現方法としての JavaScript ですが、未対応や意図的に無効にしている方への配慮はどうするのかがポイントかと。 それから、単にファイルの更新として考えると データファイルも JavaScript の外部ファイルも HTML のファイルも手間等更新する事には変わりがない。 (唯一、ファイルのタイムスタンプを意識している場合くらいしか影響はないかと思いますが。) とすると、HTMLで直接書いている方が 閲覧者の環境等配慮が少なくて済み、かえって楽かも・・・。 尚、プルダウン自体を JavaScript, CSS を用いてデザインに細工をする事も出来ますが・・・。 結局、何の為に外部ファイルで管理と思っているのかがポイントですね。 その仕掛けを実現する為に目的に反する事態になっては・・・。 尚、技術的な事でよりデータのみを別に管理したいのなら #1の方の回答の改良策として var ichiran = new Array( "100番 花子", "111番 太郎", "123番 次郎", "200番 三郎"); の配列(データ)の部分のみを別ファイルにするという方法もあります。 JavaScript は HTML に読み込まれたその場所,状態で評価,実行されますので、別ファイルかどうかは一切動作に関係ありません。

jamslot
質問者

お礼

ご回答ありがとうございます。 いろいろなアドバイスを頂いて感謝しております。 cgiはまだまだ勉強中でして、理解するには至っていません(恥) リストを外部にしたかった理由はindex.html内をすっきりとさせたかったからです。入り組んだテーブルレイアウトになってしまってまして、、、余分な物はできるだけ外にと思いましたのでw

関連するQ&A

  • javascriptのプルダウンで項目外の表示可否

    javascriptのプルダウンで一覧から項目を選択したら、プルダウンに表示する文字を一覧とは違うものに出来るかどうか。 説明文が分かりにくかったら申し訳ございません。 図と文字で説明すると以下のような感じです。 ============================ 前提:リストに表示させる項目は「ああああ」「いいいい」「うううう」 1.まず、プルダウンを開きます。  [    ▽]  ――――― |ああああ| |いいいい|←「いいいい」を選択する |ううううう |  ――――― 2.項目を選択する。  [2番目▽]←「いいいい」を選択したが、「2番目」とプルダウンに表示させる。 3.またプルダウンリストを開く  [2番目▽]  ――――― |ああああ| |いいいい| |ううううう |  ――――― 「2番目」と表示されたまま最初にあった全ての項目が表示される。 プルダウンは複数行あるグリッド(javascriptでもこの部品名か分かりませんが、エクセルみたいに動作する部品です)でA列に同じ種類が置かれます。 ↓こんな感じで  A列 | B列 | C列 |←ヘッダ部 ―――――――――――― [  ▽]|     |    | ←ボディ ―――――――――――― [  ▽]|     |    | ―――――――――――― [  ▽]|     |    | ―――――――――――― ============================ 上記のような動作はjavascriptでは可能でしょうか? javascriptは門外漢で、プログラマーにjavascriptでは出来ない!と言われてしまっているのですが、VB的には出来るのだからjavascriptでも出来るのではないかと思っています。 ただ、動作させる場所がweb上なので自分が思っているものとは制限が違うのではないかもと思い、意見を言えない状態です。 ご存知のいらっしゃいましたら  ・可能か否か 出来れば  ・どのような作り方であれば実現できそうか (プルダウンを開いた時と閉じた時で処理を走らせればいいとか簡単でいいので) などを教えていただければ幸いです。 よろしくお願いいたします。

  • 連動するプルダウンリストの作成

    他にも似たような質問があるのですが、連動するプルダウンリストを作成しています。 二次元配列を使ったものはあるのですが、三次元以上の多次元配列を使ったものがないので質問させて頂きました。 下記のような内容でエリアと都道府県を選択できるプルダウンリストがあります。 これをJavascriptの三次元配列を利用してさらに市町村を選択できるリストを作成したいと思っています。 それぞれのプルダウンリストは、エリアの中でAを選択するとAのエリアの中にある都道府県が選択でき、都道府県を選択するとそれに該当する市町村が選択できるように連動するように作成したいと思っています。 ご指導お願いします。 <html> <head> <script language="javascript"><!-- function hoge(area){ var t=new Array();//optionの項目(text) var v=new Array();//optionのvalue if(area=='A'){ t[0]='A-1';v[0]='A1'; t[1]='A-2';v[1]='A2'; t[2]='A-3';v[2]='A3'; t[3]='A-4';v[3]='A4'; t[4]='A-5';v[4]='A5'; } else if(area=='B'){ t[0]='B-1';v[0]='B1'; t[1]='B-2';v[1]='B2'; } else if(area=='C'){ t[0]='C-1';v[0]='C1'; t[1]='C-2';v[1]='C2'; t[2]='C-3';v[2]='C3'; } else if(area=='D'){ t[0]='D-1';v[0]='D1'; t[1]='D-2 hogehoge';v[0]='D2'; } else{t[0]='都道府県'} var obj=document.frm.s2.options; obj.length=0; for(i=0;i<t.length;i++){ obj[i]=new Option(t[i]); obj[i].value=v[i]; } obj[0].selected=true; if(document.layers){window.resizeBy(-10,-10);window.resizeBy(10,10)} } //--></script> </head> <body> <form name='frm'> <select onChange="hoge(this.options[this.options.selectedIndex].value)"> <option value=''>エリア名</option> <option value='A'>エリアA</option> <option value='B'>エリアB</option> <option value='C'>エリアC</option> <option value='D'>エリアD</option> </select> <select name='s2' size=1 onChange="alert(this.options[this.options.selectedIndex].value)"> <option>都道府県</option> </select> </form> </body> </html>

  • 毎週土曜日のみの日付を取得、プルダウンリストに表示させたい。

    毎週土曜日のみの日付を取得、プルダウンリストに表示させたい。 よろしくお願い致します。 表題の通りなのですが、Javascriptで「毎週土曜日の日付のみ」を取得して、 プルダウンリストで表示・選択させたいと考えております。 以前、任意での指定日以降(明日や明後日など)の日付と曜日を取得して、 プルダウンで表示・選択できるコード(下記のものです)を教えて頂いたのですが、 このような感じで土曜日の日付のみを表示・選択できるようになると理想です。 <script language="javascript"> //var Today = new Date(); //var d = new Date(); var Youbi = new Array( "日", "月", "火", "水", "木", "金", "土" ); /* ひと月後までを表示 */ for ( var i = 3; i < 31; i++ ){ var d = new Date(); d.setDate( d.getDate() + i ); /* 各要素を抽出(月と日は2桁で)*/ var sYer = "" + d.getFullYear(); var sMon = ( "00" + ( d.getMonth() + 1 ) ).match( /..$/ );; var sDat = ( "00" + d.getDate() ).match( /..$/ ); var sDay = Youbi[ d.getDay() ]; /* <option>を書き出し */ document.write( "<option value = '" + sYer + "年" +sMon + "月" + sDat + "日" + "'>" +sYer + "年" + sMon + "月" + sDat + "日(" + sDay + ")</option>\n" ); } </script> もしお分かりの方がいらっしゃいましたら、ご教授頂けると幸いです。 どうぞよろしくお願い致します。

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

    こんにちは。 よくある質問もみたのですが「複数のプルダウンメニュー」「フレームを使ったプルダウン」というのはあるのですが、 フレームを使用して左フレームに複数プルダウン、そこで選んだものを右フレームに表示させるというのが見つかりませんでした。 「複数のプルダウンメニュー」もつくれますし、「別フレームに表示させる」こともできるのですが、 プルダウンを増やしたとたんに動きません。 ネームを変えてもみたのですがうまくいきません。 フレームを二つつくって <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本目が表示されません。 どうすればいいか教えていただけないでしょうか?

  • Perlで項目の集計をしたい

    サークルのメンバーリストをHPで管理しています。 画面では○月○日という項目に出席・欠席・未定をコンボボックスから選択して登録してもらって一覧表示しています。 名前  7月1日  7月2日  7月3日 ------------------------------------ 太郎  出席   欠席   出席 次郎  欠席   出席   出席 三郎  出席   欠席   出席 ↑こんな感じです。 そこで表の上に7月1日の出席人数○人、欠席人数○人、未定人数○人という感じで表示させたいと思っています。 データはttdata.cgiに入っていて表はichiran.cgiで表示しています。 @daylist=('7/1','7/2','7/3','7/4','7/5',); @syukketsulist=('出席','欠席','未定',); ttdata.cgi内では 太郎,0,1,0 次郎,1,0,0 三郎,0,1,0 となっています。 いろいろ調べてみましたが解決できませんでした。 もしわかる方がいましたら教えてください_(._.)_

  • Perlで指定した期間で合致する値を集計したい

    サークルのメンバーリストをHPで管理しています。 画面では○月○日という項目に出席・欠席・未定をコンボボックスから選択して登録してもらって一覧表示しています。 名前  7月1日  7月2日  7月3日  7月4日  7月5日 -------------------------------------------------- 太郎  欠席   欠席   出席 次郎  出席   出席   出席 三郎  出席   欠席   出席 ↑こんな感じです。 そこで表の上に7月1日~7月3日において全部出席した人数を表示させたいと思っています。 データはttdata.cgiに入っていて表はichiran.cgiで表示しています。 @daylist=('7/1','7/2','7/3','7/4','7/5',); @syukketsulist=('出席','欠席','未定',); ttdata.cgi内では 太郎,1,1,0 次郎,0,0,0 三郎,0,1,0 となっています。 7/1、7/2、7/3が全部0になっている人数をカウントしたら良いと思い、色々試しましたができませんでした(/_;) うまく表示できるやり方を教えてください。_(._.)_

    • ベストアンサー
    • Perl
  • 配列の特定の位置から別の配列をマージする方法

    テトリスを作成しています。listという配列の3番目(インデックスの)を始点として、minoという配列をマージしたいです。このような場合の記述方法がわかりません。 以下がコードですが、どうやって始点を指定するのでしょうか。 list[3]を始点とします。 var list = [1,0,0,0,0,0,0,1] var mino = [2,2] func _ready(): #3番目からスタート for i in range(mino.size()): list[i] = mino[i] print(list) 得たい結果はこうです。ヒントだけでも貰えればと思います。 [1,0,0,2,2,0,0,1]

  • リストから計算するJavaScript

    質問させて下さい。料金を計算するスクリプトを組みたいのですが 良くある単価×個数という形ではなく、リストAAAの中のaaaは500円、 bbbは5000円、リストBBBの中のcccは10000円、dddは15000円といった感じで 各リストの合計と総合計が出る形にしたいのです。 function totalPrice(){ var numCode01 = document.inputForm.code01.selectedIndex; var priceCode01 = 1 * numCode01; document.inputForm.code01_price.value = priceCode01; var numCode02 = document.inputForm.code02.selectedIndex; var priceCode02 = 1 * numCode02; document.inputForm.code02_price.value = priceCode02; var numCode03 = document.inputForm.code03.selectedIndex; var priceCode03 = 1 * numCode03; document.inputForm.code03_price.value = priceCode03; var total = priceCode01 + priceCode02 + priceCode03; document.inputForm.total_price.value = total; } と組んで <select name="code01" onChange="totalPrice();"> <option value="500">aaa</option> <option value="5000">bbb</option> </select> としてみたのですが、うまくいきません。基本的な知識が無いまま組んでしまったので どこが悪いのかも分かりません。どうかご助言お願いします。

  • クラスの中の配列へのアクセス

    お世話になります。 昨日?に似たような質問をさせていただきましたが、またよろしくお願いいたします。 以下のようなクラスがあります。 (自分で動かして確認したいのですが、今確認する環境がないので申し訳ありませんがご回答お待ちしてます) class Class1{   var $list; // 添字が数値のの配列です   …   function getList(){     return $this->list;   } } $a = new Class1; $a->getList()->[0] ↑上のようなやり方で、Class1の$listの配列の1番目(0番目)の要素を取得したいのですが、これは可能なのでしょうか? 何卒よろしくお願い致します。

    • ベストアンサー
    • PHP
  • リストボックスの4連

    先日も質問したものなんですがお願いします。 リストボックスで検索すると結果いくつもあるのですが、 いずれもセレクトボックスの様です。 私が教えてほしいのは、リストボックスから選択した項目を次のリストボックス、更に選択し次のリストボックスに・・・と3連続した結果、4番目のリストボックスに答えを表示したいのですが分かりません。 いろいろ調べてこんなのがありましたので引用させていただきましたがこれは2番目で結果が表示します。このソースをいろいろ変更したりしてみたんですが、うまくいきません。どなたか教えてくださいお願いします。 これ以外でも結構です。 <html lang="ja"> <head> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>sample</title> <style type="text/css"> select { width: 100px; } </style> <script type="text/javascript"> //左リスト用連想配列 //キーは0からの連番にして下さい。アイテムが左リストのテキストになります。 var l_Array = { '0' : '大阪', '1' : '京都', '2' : '兵庫', '3' : '奈良', '4' : '滋賀' } //右リストボックス用連想配列 //左リストのvalueをキーにします。 //アイテムはカンマで区切れば幾つにでも出来ます。 var r_Array = { '0' : 'たこ焼き,通天閣', '1' : 'やつはし,清水寺', '2' : '明石焼き,甲子園', '3' : '奈良漬,法隆寺,せんとくん,まんとくん', '4' : '鮒寿司,琵琶湖' } //左リストのオプション群をhtmlソース中に //直接書くのであれば、この関数は実行不要です。 function makeLeft() { var sel = document.getElementById('l_sel'); var i; for (i in l_Array) { var opt = document.createElement('OPTION'); opt.setAttribute('value', i); var tn = document.createTextNode(l_Array[i]); opt.appendChild(tn); sel.appendChild(opt); } } //この関数で右側のアイテムを入替えてます。 //右リストのvalueは、左リストのvalue+0からの連番となります。 function repRight(e) { var sel = document.getElementById('r_sel'); while (sel.hasChildNodes()) { sel.removeChild(sel.firstChild); } var tgt = e.target || e.srcElement var optArray = r_Array[tgt.value].split(','); for (var i = 0; i < optArray.length; i++) { var opt = document.createElement('OPTION'); opt.setAttribute('value', '' + tgt.value + i); var tn = document.createTextNode(optArray[i]); opt.appendChild(tn); sel.appendChild(opt); } } </script> </head> <body onload="makeLeft();"> <!-- makeLeftを実行しない場合は <body> とする --> <table> <tr> <td> <form name="l_frm" id="l_frm"> <select name="l_sel" id="l_sel" size=10 onchange="repRight(event);"> <!-- <option value="0">大阪</option> <option value="1">京都</option> <option value="2">兵庫</option> <option value="3">奈良</option> <option value="4">滋賀</option> --> </select> </from> </td> <td> <form name="r_frm" id="r_frm"> <select name="r_sel" id="r_sel" size=10> </select> </from> </td> </tr> </table> </body> </html>

専門家に質問してみよう