リストボックスの内容を追加と削除する方法

このQ&Aのポイント
  • リストボックスの値を別のリストボックスに追加する方法について教えてください。
  • 追加ボタンを押すと選択した値をAのリストボックスに追加し、Bのリストボックスからは削除します。
  • また、戻すボタンを押すとAのリストボックスから選択した値を削除し、Bのリストボックスに表示させる方法も教えてください。
回答を見る
  • ベストアンサー

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

質問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); } } }

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

もっと効率的なかきかたもあるとは思いますが、元ソースをいかすと こんな感じでしょうか? <style type="text/css"> .floatdiv{ float:left; } .select0{ width:200px; } </style> <script language="javascript"> function addItem(f) { var A = f.A; var B = f.B; var C=new Array(); 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); C[C.length] = i; } } for (var i=C.length -1; i>=0; i--) { B.options[C[i]] = null; } } function delItem(f) { var B = f.A; var A = f.B; var C=new Array(); 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); C[C.length] = i; } } for (var i=C.length -1; i>=0; i--) { B.options[C[i]]=null; } } </script> <form name=frm method=post action=/beta/index.php> <div class="floatdiv"> <select name=A size=8 multiple class="select0"> </select> </div> <div class="floatdiv"> <div> <input type=button value="← 追加" onClick="addItem(this.form);"> </div> <div> <input type=button value="戻す →" onClick="delItem(this.form);"> </div> </div> <div> <select name=B size=8 multiple class="select0"> <option>AAAAA</option> <option>BBBBB</option> <option>CCCCC</option> <option>DDDDD</option> <option>EEEEE</option> <option>FFFFF</option> </select> </div> </form>

morizoukun
質問者

お礼

返事が遅くなり大変申し訳ございません。 無事動作いたしました 本当にありがとうございました

関連するQ&A

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

    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>

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

    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>

  • リストボッックスからリストボックスへの値を追加したい

    ASPのプログラムの中に Bというリストボックスの値を「追加」ボタンを押すとAのリストボックスに 追加できるようなスクリプトを作りたいのですが、 Request.Formで同ページにPOSTでsubmitして送っていたのですが それだと何度も追加ができなくなってしまうので他のやり方にしたいのです。 いろいろ調べてVBScriptやJavaScriptでできるのではないかというのまでは わかったのですが、どうもやり方がいまいちわかりません。 できればJavaScriptのほうでやりたいと思うのですがどなたか良い方法を ご教授いただけないでしょうか。 よろしくおねがいします。 <select size="5" multiple name="A"> </select><input type="submit" value="追加"><select size="5" multiple name="B"> <option>AAAAA</option> <option>BBBBB</option> <option>CCCCC</option> </select>

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

  • JavaScriptでリストボックスに追加した値を渡したい

    リストボックスが2つあり、一方には候補一覧があり、追加ボタンで もう一方に選択項目を追加していくようなフォームを作りました。 で、選択項目をsubmitでサーバへ渡したいのです。 いろいろ調べると、Hidden項目にセットしておく方法があることは分かった のですが、具体的にどうしたらよいのでしょうか? 以下、長いですが、ソースです。 <script language="JavaScript"> //グローバル変数の設定 //コンボボックスの表示内容 cbnum = 2; //コンボボックスの項目数 cbdata = new Array(cbnum); cbdata[0] = "グループ"; cbdata[1] = "メンバー"; lbnum1 = 2; lbdata1 = new Array(lbnum1); lbdata1[0] = "TEST_G1"; lbdata1[1] = "TEST_G2"; lbnum2 = 2; lbdata2 = new Array(lbnum2); lbdata2[0] = "TEST_USER1"; lbdata2[1] = "TEST_USER2"; //lb1表示用 function ch_lb1(fm) { var selv = fm.cb1.options[fm.cb1.selectedIndex].value; if(selv == 0) { fm.lb1.length = lbnum1 for(i=0; i < lbnum1; i++) fm.lb1.options[i].text = lbdata1[i]; } else { if(selv == 1) { fm.lb1.length = lbnum2 for(i=0; i < lbnum2; i++) fm.lb1.options[i].text = lbdata2[i]; } else { fm.lb1.length = lbnum3 for(i=0; i < lbnum3; i++) fm.lb1.options[i].text = lbdata3[i]; } } } //lb2表示用 function add_lb2(fm) { var lb1len = fm.lb1.length; var lb2len = fm.lb2.length; var aditem = new Array(); for(i=0,j=0; i < lb1len; i++) { //選択されているかのチェック if(fm.lb1.options[i].selected) { flg = 0; for(k=0; k < lb2len; k++) { tmp = fm.lb1.options[i].text; //同じ項目がすでに登録されていないかのチェック if(tmp == fm.lb2.options[k].text) { flg = 1; break; } } if(flg == 0) { aditem[j] = fm.lb1.options[i].text; j++; } } } for(i=0; i < aditem.length; i++) { fm.lb2.length = lb2len + 1; fm.lb2.options[lb2len].text = aditem[i]; fm.lb2.options[lb2len].value = i; lb2len++; } } //lb2削除用 function del_lb2(fm) { var selnum = fm.lb2.selectedIndex var selv; var lb2len = fm.lb2.length; var narr = new Array(lb2len-1); var tmp; if(selnum == -1) alert("何も選択されていません。"); else { selv = fm.lb2.options[selnum].text; for(i=0, j=0; i < lb2len; i++) { tmp = fm.lb2.options[i].text; if(selv != tmp) { narr[j] = tmp; j++; } } fm.lb2.length = narr.length; for(i=0; i < narr.length; i++) { fm.lb2.options[i].text = narr[i]; fm.lb2.options[i].value = i; } } } </script> <form name="fm16"> <table border="0"> <tr><td width="150" bgcolor="rosybrown"><font color="white"><center>選択対象</font></center></td> <td width="150" bgcolor="rosybrown"><font color="white"><center>候補一覧</center></font></td> <td bgcolor="rosybrown"> </td> <td width="150" bgcolor="rosybrown"><font color="white"><center>選択</center></font></td></tr> <tr><td bgcolor="linen"> <center><select name="cb1" onChange="ch_lb1(this.form);"> <script language="JavaScript"><!-- for(i=0; i<cbnum; i++) { if(i == 0) document.write ('<option value="' + i + '" selected>' + cbdata[i]); else document.write ('<option value="' + i + '">' + cbdata[i]); } // --></script> </select></center></td> <td bgcolor="linen"> <center><select name="lb1" size="6" multiple> <script language="JavaScript"><!-- for(i=0; i<lbnum1; i++) { if(lbnum1 > i) document.write ('<option value="' + i + '">' + lbdata1[i]); else document.write ('<option value="' + i + '">'); } // --></script> </select> <p></center></td> <td bgcolor="linen"><input type="button" name="bn2" value="追加 →" onClick="add_lb2(this.form);"><br><br><br> <input type="button" name="bn3" value="← 削除" onClick="del_lb2(this.form);"></td> <td bgcolor="linen"> <center><select name="lb2" size="6"> </select> </center></td> </tr> </table> <input type=submit value="送信"> </table> </form>

  • リスト値を変更したときに連動して他の値を変えたいのですが

    おはようございます。 JavaScriptの質問です。 ボタン1とテキストボックスとリストボックスがあり、 ボタン1を押すとリストボックスの選択行を0にして テキストボックスに選択した行の行数を出そうとしています。 リストボックスを手動で変更した場合は リストボックスの値が表示されるのですが ボタンによってリストボックスの値が変わったときに テキストの値を変えることはできないのでしょうか? 以下ソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <TITLE>JAVATEST</TITLE> </HEAD> <BODY > <P align="center"><B>TEST<BR> </B></P> <P align="center"><BR> </P><center> <script language="javascript"> <!-- function ChangeTxt() { if (document.getElementById("List").selectedIndex=="0"){ document.getElementById("txtText").value="SUCCESS"; }{ document.getElementById("txtText").value=document.getElementById("List").selectedIndex; } } function ChangeListID() { document.getElementById("List").selectedIndex="0"; } //--> </script> <FORM name="frmForm"><INPUT type="button" ID="button1" name="btnGo" value="TEST" onClick= "ChangeListID()"> <INPUT size="20" type="text" ID="txtText" name="txtText" onChange= "ChangeTxt()"> <tr> <TD align="right"><FORM><SELECT name="List" id="List" onChange="ChangeTxt()"> <OPTION value="1">Item1</OPTION> <OPTION value="2">Item2</OPTION> <OPTION value="3">Item3</OPTION> </SELECT></FORM></TD></tr> </FORM> </center> </BODY> </HTML> どなたかおわかりになる方よろしくお願いします。

  • リストボックスを連動させて・・・その2

    直前の質問で下記の回答をいただいたものです。 質問では2つのリストボックスを連動させたサンプルの回答をいただきましたが、ひょっとして、リストボックスの個数が何個でも対応させることはできないでしょうか。つまり、リストボックスのnameなどをscript部分に記さずに・・。 ここまでサンプルをもらっても改造できないので質問。 (^^; ■JavaScript <SCRIPT language=JavaScript> <!-- strBase = "test.cgi?hinmei=denwa "; strS1 = "&s1="; strS2 = "&s2="; function set(){  strS1b = strS1  strS2b = strS2   if (document.form.s1.options[document.form.s1.selectedIndex].value)   strS1b += document.form.s1.options[document.form.s1.selectedIndex].value;  if (document.form.s2.options[document.form.s2.selectedIndex].value)   strS2b += document.form.s2.options[document.form.s2.selectedIndex].value;  strURL = strBase + strS1b + strS2b;  document.form.text.value = strURL; } //--> </SCRIPT> ■フォーム <FORM NAME="form"> <select name="s1" onChange="set()"> <OPTION VALUE="" SELECTED>↓【選択して下さい】</OPTION> <OPTION VALUE="big">big</OPTION> <OPTION VALUE="small">small</OPTION> </SELECT> <select name="s2" onChange="set()"> <OPTION VALUE="" SELECTED>↓【選択して下さい】</OPTION> <OPTION VALUE="red">red</OPTION> <OPTION VALUE="white">white</OPTION> </SELECT> <INPUT TYPE="text" SIZE=50 NAME="text"> </FORM>

  • FORMデータを配列としてそうしんしたいのですが・・・

    JavaScriptでセレクトボックス内の値が変化したらもう一つあるセレクトリスト内の値が変更されるように組みました。 以下コード。 ----------------------- <HTML> <head> <script type="text/JavaScript"> <!-- menuItem = [["A","B","C","D","E"],       ["1","2","3"], ["あ","い","う","え","お","か"]]; function setMenuItem(n) { len = document.myForm.works.options.length; for (i=len-1; i>=0; i--) { document.myForm.works.options[i] = null; } for(i=0; i<menuItem[n].length; i++) { document.myForm.works.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } } } //--> </script> </head> <body> <FORM name = "myForm"> <SELECT name="list" onChange="setMenuItem(this.selectedIndex)"> <option value="list1">リスト1 <option value="list2">リスト2 <option value="list3">リスト3 </SELECT> <SELECT name="works[]" MULTIPLE> <OPTION>A <OPTION>B <OPTION>C <OPTION>D <OPTION>E </SELECT> </FORM> </BODY> </HTML> ----------------------- でセレクトリスト内のデータを配列として送信したいのですがうまくいきません。 セレクトリストのnameはworks[]にしたら動作すらしなくなりました。 どなたかご教授願います。

  • 複数選択のリストボックスの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 }

  • リストボックスから選択できないのはどうして!?

    実はJAVASCRIPTでリストボックス(select1)から会社名を選択するとその下のテキストボックス(link)に そのURLがでるものを作っていたのですが、なぜかリストボックスが選択できない状態になってしまいます。 下のがそのコードなのですが、どなたかわかるかたいらっしゃいませんか? どうぞよろしくお願いいたします。 <SCRIPT type="text/javascript"> <!-- function aaa() { var a; if((f.select1.value) ="A社") {url = "http://www.a***.co.jp" }; else if((f.select1.value) ="B社") {url =" http://www.b***.co.jp" }; else if((f.select1.value) ="C社") {url = "http://www.c***.co.jp" }; else{url = "URLはありません"}; (f.link.value) = url; return } //--> </script> <select onchange = "aaa()" name="select1"> <option value="A社" selected>A社</option> <option value="B社">B社</option> <option value="C社">C社</option>      <option value="D社">D社</option> </select> <input type="text" name="link">

専門家に質問してみよう