• ベストアンサー

複数選択のリストボックスのvalueを表示

現在下記のようにしてリストボックスの値をフォームボタンに表示しています。複数選択のリストボックスに変更した場合の書き方のアドバイスをいただきたいのですが。 function Select( parts ){ var i,Msg; for (i = 0; i < parts.options.length; i++){ if ( parts.options[i].selected ){ Msg = parts.options[i].value + "さん宛送信"; } } document.main.Submit.value = Msg }

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

  • ベストアンサー
noname#3852
noname#3852
回答No.1

複数選択されたときにどのように表示させたいのかが不明なので、お答えしづらいのですが、単純に選択した項目の値を並べて良いのであれば、例えば以下のサンプルを考えられます。 function Select( parts ){ var i,Msg; Msg = "" ; for (i = 0; i < parts.options.length; i++){ if ( parts.options[i].selected ) { Msg += parts.options[i].value + "さん、" ; } } Msg += "宛に送信"; document.main.Submit.value = Msg ; } ここでのポイントは、for文の手前で、Msgを空文字列で確実に初期化すること、と、複合代入演算子+=を使うことです。 「+=」は、「A += B」と「 A = A + B」の略記と思ってください。すなわち、変数Aにすでに格納されている文字列の後ろにBが連結された値がAに格納される訳です。ただし、「A+=」が実行される段階でAの値が不定の場合、その挙動は不明ので、「A+=」(があるfor文)の手前で初期化を行っておきます。 ただ、これでは、たくさん選択するとSubmitボタンが横に大きくなってしまいますし、かといって、改行を挟んで連結させたところでボタン上の文字を複数行になるとは思えませんし。。。 中途半端な回答ですみません。

s-holmes
質問者

お礼

回答ありがとうございました。解説していただいた内容は初心者にとってはわからない部分もあるのですが、やりたい内容はこれでまったくOKでした。複数と言っても最大でも3人ほどの想定のフォームですので、これで使用させていただきます。 #複合代入演算子というのを新たに学びました。

関連するQ&A

  • リストボックス全選択について

    JavaScriptについて質問です。 リストボックスA,B と プルダウンC という画面項目があると仮定し、 submitボタンを押下したとき、 リストボックスA,Bの項目全てが全選択され、プルダウン項目はそのままにしたいと考えております。 下記のソースのように作成したのですが、 リストボックスが全選択されるところまでは良いのですが、 プルダウン項目が最後の項目が選択された状態になってしまいます。 リストボックスだけが全選択され、プルダウン項目はそのままにするにはどうしたら良いでしょうか。 かなり困ってます。 どなたか助けてください。。 以下ソースです。 <html> <head> <script language="JavaScript"> <!-- function selectAll(){  var str = document.getElementsByTagName("option"); for(i=0;i<str.length;i++){ str[i].selected = true; } } //--> </script> </head> <body> <table> <tr> <td> リストA<br> <select name="listboxA" multiple> <option value="サンプル1">サンプル1</option> <option value="サンプル2">サンプル2</option> <option value="サンプル3">サンプル3</option> </select> </td> <td> リストB<br> <select name="listboxB" multiple> <option value="サンプル4">サンプル4</option> <option value="サンプル5">サンプル5</option> <option value="サンプル6">サンプル6</option> </select> </td> <td> プルダウンC<br> <select name="Pdown"> <option value="サンプル7">サンプル7</option> <option value="サンプル8">サンプル8</option> <option value="サンプル9">サンプル9</option> </select> </td> </tr> </table> <br> <input type=submit value="送信" onClick="selectAll()"> </body> </html>

  • リストボックスの内容追加と削除

    質問QNo.172288を参考にプログラムを作成しました。 そこで下記のような処理をしたいのですがどのように処理をしていいのか解りません。 Bというリストボックスの値を「追加」ボタンを押すとAのリストボックスに追加するときにBのリストボックスより選択した値は削除(非表示)あるいはAのリストボックスに既に存在する同じ値はAリストボックスには追加しない。(重複チェックみたいな感じです) それと、Aというリストボックスの値を「戻す」ボタンを押すと選択されている値をAのリストボックスより削除し、Bのリストボックスに表示させる JavaScriotでは難しいいですか。ご教授いただけないでしょうか 宜しくお願いします <form name=frm method=post action=/beta/index.php> <td align=right> <select name=A size=8 multiple> <option value=""></option> </select> </td> <td align=center> <input type=button value="← 追加" onClick="addItem();"> <p> <input type=button value="戻す →" onClick="delItem();"> <td align=left> <select name=B size=8 multiple> <option>AAAAA</option> <option>BBBBB</option> <option>CCCCC</option> </select> </td> function addItem() { A = document.frm.A; B = document.frm.B; for (var i=0; i<B.options.length; i++) { if (B.options[i].selected) { A[A.options.length] = new Option(B.options[i].text,B.options[i].value); } } } function delItem() { B = document.frm.A; A = document.frm.B; for (var i=0; i<B.options.length; i++) { if (B.options[i].selected) { A[A.options.length] = new Option(B.options[i].text,B.options[i].value); } } }

  • ネスケで動かない空白チェック

    下記のようにリストボックスの未選択をチェックしていますが、ネスケだと動きません。アドバイスをいただけないでしょうか。 function submitCheck(){ for( i=0 ; i<document.main.length ; i++ ){ if(document.main.elements[i].type == "select-one" && document.main.elements[i].value == "err"){ alert("未選択項目があります。"); document.main.elements[i].focus(); return false; } } } <FORM NAME="main" ACTION="test.cgi" METHOD="post" onSubmit="return submitCheck()"> <SELECT NAME="性別"> <OPTION value="err" SELECTED>↓【選択して下さい】</OPTION> <OPTION>男</OPTION> <OPTION>女</OPTION> </SELECT> <INPUT TYPE="submit" VALUE="送 信" onClick="document.main.name.value=''">

  • firefoxでjavascriptが…

    現在、二つのセレクトボックス間でデータのやり取りをするjavascriptを製作しております。ieでは問題なく動作するのですが、firefoxだと セレクトボックスの移動ボタンを押すと余計なものまで消えてしまいます。どなたかご教授ください。 javascript↓ var master_selected_value; var master_selected_text; var user_selected_value; var user_selected_text; function select_master(a){ master_selected_text = a.master_list.options[a.master_list.selectedIndex].text; master_selected_value = a.master_list.options[a.master_list.selectedIndex].value; } function select_user(a){ user_selected_text = a.select_list.options[a.select_list.selectedIndex].text; user_selected_value = a.select_list.options[a.select_list.selectedIndex].value; } function portlet_move(a,b,c){ if( 1 == b ){ var sw = 0; for( n = 0 ; n < a.select_list.length ; n ++ ){ if( a.select_list.options[n].text == master_selected_text){ sw = 1; } } if( sw == 0 && master_selected_text != null ){ a.select_list.options[a.select_list.length] = new Option(master_selected_text,master_selected_value); } }else{ if( null != user_selected_text ){ for( n = a.select_list.selectedIndex ; n < a.select_list.length - 1; n ++ ){ a.select_list.options[n] = a.select_list.options[n + 1]; } a.select_list.length = a.select_list.length - 1; } user_selected_text = null; user_selected_value = null; } } function data_sum(a,b){ var buff = ""; for( n = 0 ; n < a.select_list.length ; n ++ ){ buff = buff + a.select_list.options[n].value; } a.select_list_data.value = buff; a.type.value = b; a.submit(); } function data_send(a,b){ var buff = ""; for( n = 0 ; n < a.select_list.length ; n ++ ){ buff = buff + a.select_list.options[n].value; } a.select_list_data.value = buff; a.type.value = b; a.send.value = "true"; a.submit(); } html↓ <form method="post" action="test.php" onsubmit="return moveItemSelect('ListBox1','ListBox2');"> <input type="hidden" name="type" value=""> <input type="hidden" name="select_list_data" value=""> <input type="hidden" name="send" value=""> <table> <tr> <td> <select name="type" onchange="data_sum(this.form,'recommended');"> <option value="a" selected="selected">a</option> <option value="b">b</option> </select> </td> <td></td> <td></td> </tr> <tr> <td> <select size="10" name="master_list" onchange="select_master(this.form);"> <option value="1">1</option> <option value="2">2</option> </select> </td> <td> <input type="button" class="button" value="→" onclick="portlet_move(this.form,1,2);"> <br /> <input type="button" class="button" value="←" onclick="portlet_move(this.form,2,1);"> </td> <td> <select size="10" name="select_list" onchange="select_user(this.form);"> <option value="1">1</option> </select> </td> </tr> <tr> <td colspan="3"><input type="button" class="button" value="登録" onclick="data_send(this.form,'recommended_write');" /></td> </tr> </table> </form>

  • WebDatabaseのlistから選択項目表示

    HTML5 Web Database でlistから選択した項目を詳細表示したい。詳細一覧detail_b()押下した際、listで選ばれているレコード内容を表示したい。色々試しているのですが・・・どこがおかしいかわかりません。 function load() で list.options[list.options.length] = new Option(row.val2, row.val, row.key1); 項目表示した場合、 function detail_b() で どのようなSELECT文を書けば listで選択された行を指定できるのですか? <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript"> var db = openDatabase("my_sample3", "", "Sample for my3", 1024*1024); db.transaction(function(tx) { tx.executeSql("create table if not exists storage (key1, val, val2)"); }); function load() { db.transaction(function(tx) { tx.executeSql("select * from storage", [], function(tx, rs) { var list = document.getElementById("list"); list.innerHTML = ""; var rows = rs.rows; for (var i = 0, n = rows.length; i < n; i++) { var row = rows.item(i); list.options[list.options.length] = new Option(row.val2, row.val, row.key1); } }); }); } function detail_b() { var list = document.getElementById("list"); if (list.selectedIndex < 0) { return; } var selected = list.options[list.selectedIndex].value; db.transaction(function(tx) { tx.executeSql("select * from storage where key1 = ?", [selected], function(tx, rs) { var rows = rs.rows; var row = rows.item(0); detail.innerHTML = ""; detail.options[detail.options.length] = new Option(row.val2, row.val, row.key1); }); }); } function remove() { 省略 } function add() { 省略 } </script> </head> <body onload="load()"> <h1></h1> <table border="0"> <tbody> <tr> <td colspan="2"><select id="list" size="5" style="width: 200px"></select></td> <td><button onclick="detail_b()">詳細一覧</button><BR><button onclick="remove()">削除</button></td> <td rowspan="4"><select id="detail" size="5" style="width: 400px"></select></td> </tr> <tr> <td><font face="Times New Roman">キー:</font></td> <td><input type="text" id="key1"></td> <td></td> </tr> <tr> <td><font face="Times New Roman">値:</font></td> <td><input type="text" id="value"></td> <td></td> <td></td> </tr> <tr> <td><font face="Times New Roman">値2:</font></td> <td><input type="text" id="value2"></td> <td><button onclick="add()">追加</button></td> </tr> </tbody> </table> </body> </htm>

    • ベストアンサー
    • HTML
  • リストボックスに追加した全ての値を取得したいのですが・・・

    No.172288で質問したものですが まだJavaScriptを勉強しはじめたばかりでまた壁にぶつかってしまいました。 Bのリストボックスの値をAに追加して他のページにPOSTで送りたいのですが Aに追加された値をすべて送りたいのです。 それで、まずすべての値をとれるかどうかを確認するためにSubmitボタンを押して すべてを表示させるものを作ってみたのですが、どうしても 一番目(つまりiが0のAAAAA)しか表示できません。 エラーも出ないのでどこが間違っているのかがわからないのですが どこが間違っているのでしょうか。 何度もすみませんがよろしくおねがいします。 <html> <head> <title></title> </head> <script type="text/JavaScript"> <!-- function addItem() { A = document.X.A; B = document.X.B; for(var i=0;i<B.options.length;i++) if(B.options[i].selected) A[A.options.length] = new Option(B.options[i].text, B.options[i].value); } function func(){ for(var w=0;w<A.options.length;w++) document.write(A.options[w].text); } // --> </script> <body> <form name="X"> <select size="5" multiple name="A"> </select> <input type="button" value="Copy" onClick="addItem()"> <select size="5" multiple name="B"> <option>AAAAA</option> <option>BBBBB</option> <option>CCCCC</option> </select> </form> <form name="Y"> <input type="button" value="Submit" onClick="func()"> </form> </body> </html>

  • 選択されていないときにメッセージ

    やりたいことはリストボックスが選択されていない時に、テキストエリアに入力しようとするとメッセージを出すことです。 下記は、未完成の切り貼りです。(全然デタラメかもしれません・・) 助言をいただけると助かります。 <SCRIPT LANGUAGE=javascript> function alert() if (document.main.kubun.value = "↓【選択して下さい】"){ alert("先に選択すること。") } </SCRIPT> <FORM NAME="main" ACTION="default.cgi" METHOD="POST"> <SELECT NAME="kubun"> <OPTION SELECTED>↓【選択して下さい】</OPTION> <OPTION VALUE="東京">東京</OPTION> <OPTION VALUE="大阪">大阪</OPTION> </SELECT><BR> <TEXTAREA NAME="TextArea" ROWS="7" COLS="73" onclick="alert()"> </TEXTAREA> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="送信"></form>

  • セレクトボックスに"value"と"word"を付け加えたい。

    初めての投稿をさせてもらいます。JavaScript初心者な者で解る方がいらっしゃればご教授のほど宜しくお願いします。 質問させてもらいたい事はこちらのソースに"value"と"word"を付け加えることは出来ますでしょうか? 外部ファイルには /** * 選択肢クラス * @param parentValue 親の値(null:いつでも表示) * @param text 表示テキスト * @param value 値 * @param style CSS(省略可) */ function SelectOption(parentValue, text, value, style) { this.parentValue = parentValue; this.setOption = function() { this.text = text; this.value = value; if(style) { this.style.cssText = style; } }; return this; } /** * セレクトボックスクラス * @param id セレクトボックスID */ function SelectBox(id) { /** * IDに対応オブジェクトを取得 * @return オブジェクトorNULL */ function getObject() { var obj = document.getElementById(id); if(!obj.options && ( (typeof obj.length) == "number") ) { if(obj.length > 0) { obj = obj[0]; } else { obj = null; } } return obj; } // オプションのリスト var options = []; /** * オプション登録 * @param condition 表示条件 */ this.registOption = function(option) { options[options.length] = option; }; // 子のオブジェクト var child = null; /** * 子のオブジェクトを設定する * @param childObj 子のオブジェクト */ this.setChild = function(childObj) { child = childObj; }; /** * オプション反映 * @param parentValue 親の値(null:全部表示) * ※比較に==を使っているのでundefinedもnullと等しく扱われる。 */ this.make = function(parentValue) { var obj = getObject(); if(obj) { // 選択肢削除 obj.options.length = 0; // 表示すべき選択肢抽出 var opt = (parentValue != null) ? [] : options; if(parentValue != null) { for(var i = 0; i < options.length; i++) { if( (options[i].parentValue == null) || (options[i].parentValue == parentValue) ) { opt[opt.length] = options[i]; } } } // 選択肢反映 obj.options.length = opt.length; for(var i = 0; i < opt.length; i++) { opt[i].setOption.call(obj.options[i]); } // 子のオブジェクトにも連鎖反映 if(child) { child.make(obj.value); } } }; return this; } HTMLファイルには <html> <head> <title>セレクトボックス親子関係</title> <script type="text/javascript" src="Select.js" charset="Shift_JIS"></script> <script type="text/javascript"><!-- var box1 = new SelectBox("sb1"); box1.registOption(new SelectOption(null, "都道府県", "0", "color:gray;")); box1.registOption(new SelectOption(null, "東京都" , "1")); box1.registOption(new SelectOption(null, "神奈川県", "2")); var box2 = new SelectBox("sb2"); box2.registOption(new SelectOption(null, "区市町村", "0", "color:gray;")); box2.registOption(new SelectOption("1" , "千代田区", "1")); box2.registOption(new SelectOption("1" , "中央区" , "2")); box2.registOption(new SelectOption("2" , "横浜市" , "3")); box2.registOption(new SelectOption("2" , "川崎市" , "4")); var box3 = new SelectBox("sb3"); box3.registOption(new SelectOption(null, "詳細" , "0", "color:gray;")); box3.registOption(new SelectOption("1" , "一番町" , "1")); box3.registOption(new SelectOption("3" , "みなとみらい", "2")); box1.setChild(box2); box2.setChild(box3); window.onload = function() { box1.make(null); }; //--></script> </head> <body> <form> <select id="sb1" onchange="box2.make(this.value);"></select> <select id="sb2" onchange="box3.make(this.value);"></select> <select id="sb3"></select> </form> </body> </html> となっております。

  • リストボックスの値をコレクに全て格納してから選択するには?

    お世話になります。 リストボックスの値をコレクションに全て格納してからoption値で選択する内容をきめようと思っています。ですが僕のコードでは For i = 0 To WebBrowser1.Document.Forms("form1").DomElement("options").Length - 1 でエラーがでてしまい、選択できません。どこが間違っているのでしょうか?教えてください。 フォームにはwebbrowser1つとコマンドボタン1つです。 <html> <body> <FORM NAME="form1"><SELECT size="1" name="sel1" > <OPTION value="21">データ1</OPTION> <OPTION value="22">データ2</OPTION> <OPTION value="23">データ3</OPTION> <OPTION value="24">データ4</OPTION> <OPTION value="25">データ5</OPTION> <OPTION value="26">データ6</OPTION> </SELECT></FORM></body> </html> -------------------------------------------- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim colOpt As Collection WebBrowser1.Navigate("上のHTML") colOpt = New Collection For i = 0 To WebBrowser1.Document.Forms("form1").DomElement("options").Length - 1 colOpt.Add(i, WebBrowser1.Document.Forms("form1").DomElement("Options(i)").Value) Next i WebBrowser1.Document.Forms("form1").DomElement("Options( colOpt('22'))").Selected = True TextBox1.Text = WebBrowser1.Document.Forms("form1").DomElement("Options( colOpt('22'))").Selected End Sub

  • リストボックスの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>