scriptでcheckboxと削除ボタンを作成し、checkした行を削除する方法

このQ&Aのポイント
  • 質問文章では、scriptを使用してcheckboxと削除ボタンを作成したが、checkをした行を削除する方法について説明されている。
  • 現在のソースの状態だと、checkboxを押すと行が即座に消えてしまうが、どの書き方が問題なのかを知りたい。
  • 具体的なソースコードが示されており、行を追加するボタンや行を削除するボタンのソースも記述されている。
回答を見る
  • ベストアンサー

scriptに関して

scriptで下記のようにcheckboxと削除ボタンを作りました。 checkをした行を削除ボタンで削除をしたいのですが、 今のソースの状態では、checkboxを押した瞬間に行が消えます。 どこの書き方がいけないのでしょうか? <scriptソース> function AddTableRows1(){ var table1 = document.getElementById("table1"); var row1 = table1.insertRow(table1.rows.length); var cell1 = row1.insertCell(0); var cell2 = row1.insertCell(1); var cell3 = row1.insertCell(2); cell1.setAttribute("class","name"); cell2.setAttribute("class","naiyo"); cell3.setAttribute("class","zyoukyou"); var HTML1 = '<input type="checkbox" onclick="remove_row(this)"><input name="gyoumuname" ID="gyoumuname" type="text" ><input type="hidden" name="gyoumuno" Id="gyoumuno" value="0">'; var HTML2 = '<textarea name="gyoumunaiyo" ID="gyoumunaiyo" Style="width:50em;height:5em"></textarea>'; var HTML3 = '<input name="gyoumuzyoukyou" ID="gyoumuzyoukyou" >'; cell1.innerHTML = HTML1; cell2.innerHTML = HTML2; cell3.innerHTML = HTML3; } function remove_row(o){ var TR = o.parentNode.parentNode; TR.parentNode.deleteRow(TR.sectionRowIndex); } <ボタンソース> <input class="btn1" type="button" value="削除" onclick="remove_row(this)">

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

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.1

<input type=checkbox> に onclick は不要 関数 remove_row に必要な以下の処理が不足 * 表 table1 内の全ての行を取り出す * 行内の checkbox が checked となっている対象行のみを抽出 * 対象の行のみ繰り返しで削除処理実行 関数 remove_row の引数は this ではなく "table1" が適切 おまけに 要素の属性 id が同じ値で複数存在するのは大変よろしくない。 解決案として以下のどちらかをオススメします * class と name だけで処理する * id=gyoumuname_1 などと数値を振る

関連するQ&A

  • scriptとJSPについて質問です。

    scriptとJSPについて質問です。 現在は下記のソースのように追加ボタンを押すことで、 テキストボックスがどんどん追加されていきます。最上行削除ボタンで一番上のテキストボックスは消せます。 最下行削除ボタンで一番下のテキストボックスは消せます。 この削除の仕様が悪くて、 追加された全てのテキストボックスの前にチェックボックスを入れて、 チェックしたもののみを削除ボタンで消すようにしたいです。 どのようにソースを書くのかをご教示いただきたいです。 「現在のscriptソース」 function AddTableRows1(){ var counter = 0; counter++; var table1 = document.getElementById("table1"); var row1 = table1.insertRow(counter); var cell1 = row1.insertCell(0); var cell2 = row1.insertCell(1); var cell3 = row1.insertCell(2); cell1.setAttribute("class","name"); cell2.setAttribute("class","naiyo"); cell3.setAttribute("class","zyoukyou"); var HTML1 = '<input name="gyoumuname" ID="gyoumuname" type="text" name="width:100em;height:10em">'; var HTML2 = '<textarea name="gyoumunaiyo" ID="gyoumunaiyo" Style="width:50em;height:5em"></textarea>'; var HTML3 = '<input name="gyoumuzyoukyou" ID="gyoumuzyoukyou" type="text" name="width:100em;height:10em">'; cell1.innerHTML = HTML1; cell2.innerHTML = HTML2; cell3.innerHTML = HTML3; } function DelTalbeFirstRow1(){ var table1 = document.getElementById("table1"); if(table1.rows.length > 1){ table1.deleteRow(1); } } function DelTalbeLastRow1(){ var table1 = document.getElementById("table1"); if(table1.rows.length > 1){ table1.deleteRow(table1.rows.length-1); } } 「JSPソース」 <tr> <th>タイトル</th><th>内容</th><th>状況</th> </tr> </table> <input type="button" value="追加" onClick="AddTableRows1();" /> <input type="button" value="最上行削除" onclick="DelTalbeFirstRow1();" /> <input class="btn1" type="button" value="最下行削除" onclick="DelTalbeLastRow1();" />

  • insertRowメソッド内で計算式を書く方法

    http://jsajax.com/Articles/TableInsertRow/157を参考に、[行を挿入]ボタンをクリックすると最終行の下に行が追加され、その中にテキストボックスを配置し計算を行うようにしたいと思い、下記のソースを記述しました。 そして追加した行で正常に計算を行うために、insertRow内のinnerHTMLのgoods_a_3の3の部分を動的に設定したり、calc内の計算式を動的にループさせる必要があると思ったのですが、どのように記述すれば良いか分からなかったため、アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 <script type="text/javascript"> <!-- window.onload = function() { document.getElementById("btnInsert").onclick = insertRow; } function insertRow() { var tbl = document.getElementById("Table1"); var row = tbl.insertRow(2); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); var cell3 = row.insertCell(2); cell1.innerHTML = "<input type=\"text\" name=\"goods_a_3\" size=\"3\" value=\"0\" onchange=\"calc();\" />*"; cell2.innerHTML = "<input type=\"text\" name=\"goods_b_3\" size=\"3\" value=\"0\" onchange=\"calc();\" />="; cell3.innerHTML = "<input type=\"text\" name=\"ans3\" size=\"8\" value=\"0\" disabled=\"disabled\" />"; } function calc(){ document.form1.ans1.value = document.form1.goods_a_1.value * document.form1.goods_b_1.value; document.form1.ans2.value = document.form1.goods_a_2.value * document.form1.goods_b_2.value; } // --> </script> </head> <body> <form action="#" name="form1" id="form1"> <table id="Table1" border="1"> <tr> <td><input type="text" name="goods_a_1" size="3" value="0" onchange="calc();" />*</td> <td><input type="text" name="goods_b_1" size="3" value="0" onchange="calc();" />=</td> <td><input type="text" name="ans1" size="8" value="0" disabled="disabled" /></td> </tr> <tr> <td><input type="text" name="goods_a_2" size="3" value="0" onchange="calc();" />*</td> <td><input type="text" name="goods_b_2" size="3" value="0" onchange="calc();" />=</td> <td><input type="text" name="ans2" size="8" value="0" disabled="disabled" /></td> </tr> </table> </form> <br /> <input id="btnInsert" type="button" value="行を挿入" /> 以上、よろしくお願いします。

  • javascript でリンクを動的に変更する方法

    下記のようなシステムを作成をしようと思っています。 javascript がまだあまり理解していない為ご教授いただければ幸いです。 質問としては追加ボタンで動的に追加した際に検索部分のリンクも一緒に動的に追加したいと考えています。 下記のリンクの「この部分」にも追加するごとにiの値が入るようにしたいと考えています。 <a href="#" onClick="window.open('store1.php?from=js&amp;no=「この部分」','search_store1','width=540,height=540')">検索</a> 宜しくお願い致します。 サンプルコード <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script language="JavaScript"> <!-- var i = 1; var maxrows = 10; function hage() { i++; // Tbody への参照を取得します var mybody=document.getElementById("histTablebody"); mystore_row=document.createElement("TR"); mystore_row.setAttribute("id","histrow"+i); mystore_cell=document.createElement("TD"); mystore_cell.setAttribute("id","num"); currenttext=document.createTextNode(i); mystore_cell.appendChild(currenttext); mystore_row.appendChild(mystore_cell); mystore_cell=document.createElement("TD"); currenttext=document.createTextNode("店舗ID"); mystore_cell.appendChild(currenttext); mystore_row.appendChild(mystore_cell); mystore_cell=document.createElement("TD"); mystore_form.setAttribute("type","TEXT"); mystore_form.setAttribute("name","store_id" + i); mystore_form.setAttribute("value",""); mystore_form.setAttribute("id", "storecell"); mystore_cell.appendChild(mystore_form); mystore_form=document.createElement("INPUT"); mystore_form.setAttribute("type","TEXT"); mystore_form.setAttribute("name","store_name" + i); mystore_form.setAttribute("value",""); mystore_form.setAttribute("id", "storecell"); mystore_cell.appendChild(mystore_form); mystore_row.appendChild(mystore_cell); mystore_cell=document.createElement("TD"); //mystore_cell=document.createElement("a"); mystore_row.appendChild(mystore_cell); mybody.appendChild(mystore_row); document.register.delrow.disabled=false; if(i>=maxrows){ document.register.addrow.disabled=true; } } var hige = function() { var mytable=document.getElementById("histTablebody"); var removeTable=document.getElementById("histrow"+i); mytable.removeChild(removeTable); i--; if(i==1){ document.register.delrow.disabled=true; } // 追加ボタンを有効にする document.register.addrow.disabled=false; } var result = function() { alert(''); } //--> </script> </head> <body> <form name="register"> <div id="hist"> <table border="1"> <tbody id="histTablebody"> <tr id="histrow1"> <td id="num">1</td> <td>店舗ID</td> <td><input type="text" name="store_id1" id="storecell"><input type="text" name="store_name1" id="storecell"></td> <td> [<a href="#" onClick="window.open('store1.php?from=js&amp;no=[]','search_store1','width=540,height=540')">検索</a>] </td> </tr> </tbody> </table> </div> <table> <tr> <td> <input type="button" id=addrow value="行を追加" onClick="hage();"> </td> <td> <input type="button" id=delrow value="行を削除" onClick="hige();" disabled="true"> </td> <td> <input type="button" value="登録" onClick="result()"> </td> </tr> </table> </form> </body> </html>

  • 動的に作成したテキストボックスの値をaspへ

    いつもお世話になっております。 javaスクリプトで動的にテキストボックスを作成し、 実行ボタンを押すと値をhiddenでtest.aspへ渡すことは可能でしょうか? 不可能であれば。。。。 test.aspへ値を渡す良い方法がありましたら、ご教示くださますようお願いいたします。 環境:IIS7.5 クラッシックASP 以下、ソースを参照してください。。。 *自宅では環境がないため、 印刷を見ながら手で入力しました。 確認して投稿しましたが。。。打ち間違い等あったらご指摘くださいませ>< --------以下ソース抜粋 addtext.asp ------------------- <script language="JavaScript"> <!-- function addDev(){ var targetName; var idObj; var tbObj; var devBlockCnt; idObj = document.getElementById("histTablebody"); tdObj = idObj.getElementsByTagName("tbody"); devBlockCnt++; targetName = "devBlock" + devBlockCnt; var mybody = document.getElementById("histTablebody"); tbcurrent_row = document.createElement("TBODY"); tbcurrent_row.setAttribute("id",targetNam); mycurrent_row=document.createElement("TR"); mycurrent_cell=document.createElement("TD"); mycurrent_row.appendChild(mycurrent_cell); mycurrent_cell=document.createElement("TD"); mycurrent_row.appendChild(mycurrent_cell); mycurrent_cell=document.createElement("TD"); mycurrent_row.appendChild(mycurrent_cell); mycurrent_cell=document.createElement("TD"); mycurrent_row.appendChild(mycurrent_cell); mycurrent_cell=document.createElement("TD"); mycurrent_row.appendChild(mycurrent_cell); tbcurrent_row.appendChild(mycurrent_row); mycurrent_row=document.createElement("TR"); mycurrent_row.setAttribute("id",histrow1); mycurrent_cell=document.createElement("TD"); mycurrent_form=document.createElement("INPUT"); mycurrent_form.setAttribute("type","TEXT"); mycurrent_form.setAttribute("name","devEntry1"); mycurrent_form.setAttribute("id","devEntry1"); mycurrent_form.setAttribute("value",""); mycurrent_cell.appendChild(mycurrent_form); mycurrent_row.appendChild(mycurrent_cell); tbcurrent_row.appendChild(mycurrent_row); mybody.appendChild(tbcurrent_row); } //--> </script> <html> <head> <title>TEST</title> </head> <body> <div align="center"> <table border="1"> <tr> <td align="left" valign="middle">入力1</td> <td> <form name="fmDev"> <div> <table border="0" id="histTablebody"> <tbody id="devBlock1"> <tr><td></td></tr> <tr id="histrow1"> <td><input type="text" name="devEntry1" id="devEntry1"> </td> </tr> </tbody> </table> </div> <table> <tr><td><input type="button" id=addDevid value="追加" onClick="addDev();"> </td> </tr> </table> </form> </td> </tr> <form name="fmHoki"> <tr> <td align="left" valign="middle">入力2</td> <td align="left"><textarea row="5" name="hokiTXT" cols="60"></textarea></td> </tr> </form> </table> </div> <teble border="0"> <tr> <form action="test.asp" method="post" name="fm2"> <tr><input type="submit" value="登録実行" alt=""></td>     <input trype="hidden" name="hokiTXT"> </form> <form name="fm3"> <td><input type="button" value="戻る" onclick="location.href='menu01.asp';"></td> </form> </tr> </teble> </body> </html> <SCRIPT LANGUAGE="vbscript"> '--------------------------------------- ' test.asp へ行く前の処理 '--------------------------------------- Sub fm2_OnClick() Dim i Document.fm2.hokiTXT.value = Document.fmHoki.hokiTXT.value  '--ここで動的に作成したテキストボックスの値をtest.aspへ渡す処理が  'わかりません。。。。。  'debug確認用 ↓ for i=0 to document.fmDev.length msgbox document.fmDev.element(i).name,,"test" msgbox document.fmDev.element(i).value,,"test" next End Sub </SCRIPT>

  • jQuery datepickerを複数使いたい

    javascript で行を追加するDOMを作成しました。 最初の1回だけdatepickerで日付をクリックすると該当のテキストボックスに日付が問題なく代入されます。 追加ボタンをクリックで行を追加した際にもjQuery datepickerを動作させるにはどうしたら良いでしょうか? function add() { var objTBL = document.getElementById("request_tb" + num); if (!objTBL) return; var count = objTBL.rows.length; // 最終行に新しい行を追加 var row = objTBL.insertRow(count); // 列の追加 var c1 = row.insertCell(0); var c2 = row.insertCell(1); var c3 = row.insertCell(2); // 各列に表示内容を設定 c1.innerHTML = '<span class="seqno' + count +'">第' + count + '日時</span>'; c2.innerHTML = '<input type="text" name="date' + count + '" class="datepicker'+ count+'" id="datepicker">'; c3.innerHTML = '<img src="img.gif">&nbsp;カレンダーで選ぶ</a>'; $('datepicker'+count).datepicker({ numberOfMonths: 2, dateFormat: 'yy-mm-dd', changeYear: false, showButtonPanel: true, minDate:0 }); } <input type="button" id="add" onClick="add()" value="追加"> ご教授の程、宜しくお願いしますm(__)m

  • 動的に作ったチェックボックスが選択できません!!

    こんにちは 閲覧ありがとうございます。 タイトルの通り、HTMLのcheckboxをjQuery/javascriptで動的に作ったのですが、動かなくて困っています。 単純に一つ一つcreateElement()で作った場合は大丈夫なのですが、作りたいものが入れ子になった状態です。 まず、作りたいものをHTMLで書くと以下になります。 <div class="input-checkbox"> <span class="kintoneplugin-input-checkbox-item"> <input type="checkbox" name="checkbox" value="value*****" id="id*****"> <label for="id*****">チェックボックス1</label> </span> </div> そして、次にこの形を動的に作ろうとしたものが以下です。 上のHTMLの<div class="input-checkbox">はあるという前提で、その子に動的に作った要素を入れようとしています。 arrayとあるのは、この内容をfor文で回すためです。 //1.span要素作成 var checkSpan = document.createElement('span'); checkSpan.className = "input-checkbox-item"; //2.checkbox作成 var viewCheckBox = document.createElement('input'); viewCheckBox.type = "checkbox"; viewCheckBox.name = "checkbox"; viewCheckBox.id = array2[k]; viewCheckBox.value = array2[k]; viewCheckBox.disabled=""; //3.ラベル作成 var viewLabel = document.createElement("label"); viewLabel.for = array2[k]; viewLabel.id = "label_"+k; viewLabel.innerHTML = array[k]; 4.//追加 $('.input-checkbox').append($(checkSpan).append(viewCheckBox).append(viewLabel)); 上記の内容で実行すると、チェックボックスとそのラベルは表示されるのですが、チェックボックスが編集不可というか、、チェックできないのです。 disabledの指定などもしてみたのですが、うまくいきませんでした。 どうやったらチェックをできるようになるでしょうか>< プログラミング初心者なので、変なところとかがあったらすいません。。。 よろしくお願いします!!

  • DOM追加時に表示されるが自動削除(?)される

    まず、初心者な質問すみません。 現在、Monacaを利用してAndroid/iPhone/iPad用のアプリを作成しています。 仕様として動的セレクトボックスで名称とLvを選択後、 押下時に画面下の一覧テーブルに行を追加する追加ボタンを作成しようとしています。 そこでDOMでテーブルの最終行に行追加を行い、セルの1つ目、2つ目、3つ目についてセル追加及び、内容の編集を行い、処理を確定させています。しかし、プレビューやAndroid版デバッガ等で確認すると、画面上で一瞬一覧テーブルに追加された後、更新の様なものがかかり、テーブルが元のヘッダーしかない状態になります。 この更新の様なものの発生を止める方法、 更新の様なものが必ず発生するのであればテーブルの情報が消えてしまうのを回避する方法、 について教えていただきたく。 --本文---- <head> <meta charset="shift-JIS"> <script src="plugins/plugin-loader.js"></script> <link rel="stylesheet" href="plugins/plugin-loader.css"> <script> // Set virtual screen width size to 320 pixels monaca.viewport({width: 320}); </script> <script type="text/javascript" language="JavaScript"> <!-- var abbility_Kind = new Array("all", "1", "2"); var abbility_Name = new Array(); abbility_Name["all"] = new Array("a","b","c","d"); abbility_Name["1"] = new Array("a","c","d"); abbility_Name["2"] = new Array("b"); var abbility_Lv = new Array(); abbility_Lv["a"] = new Array(1,2,3,4,5,6,7); abbility_Lv["b"] = new Array(1,2,3,4,5,6,7); abbility_Lv["c"] = new Array(1,2,3,4,5); abbility_Lv["d"] = new Array(1,2,3,4,5,6); function addSelOption(selObj, myValue, myText){ selObj.length++; selObj.options[ selObj.length - 1].value = myValue ; selObj.options[ selObj.length - 1].text = myText; } function createSelection(selObj, midashi, aryValue, aryText){ selObj.length = 0; addSelOption(selObj, midashi, midashi); for(var i=0; i < aryValue.length; i++){ addSelOption (selObj , aryValue[i], aryText[i]); } } function selectkind(obj){ createSelection(hoge.elements['name'], "", abbility_Name[obj.value], abbility_Name[obj.value]); } function selectname(obj){ createSelection(hoge.elements['level'], "", abbility_Lv[obj.value], abbility_Lv[obj.value]); } var i = 1; var maxAbbility = 10; function add(){ i++; var table1 = document.getElementById("needBody"); var row1 = table1.insertRow(-1); var cell1 = row1.insertCell(0); var cell2 = row1.insertCell(1); var cell3 = row1.insertCell(2); cell1.setAttribute("class","chk"); cell2.setAttribute("class","num"); cell3.setAttribute("class","name"); cell1.className = 'chk'; cell2.className = 'num'; cell3.className = 'name'; var HTML1 = '<input type="checkbox" name="chk' + i + '" value="' + i + '">'; cell1.innerHTML = HTML1; cell2.appendChild(document.createTextNode(new String(i))); cell3.appendChild(document.createTextNode(new String(hoge.elements['name'].value + hoge.elements['level'].value))); } --> </script> </head> <body> <font size="4px">構成</font> <form name="hoge"> <table> <tr><td>種類</td> <td></td> <td><select name="kind" onChange="selectkind(this)"> <option value="all">all</option> <option value="1">1</option> <option value="2">2</option> </select></td> </tr> <tr><td>名称</td> <td><font color="red">(※)</font></td> <td><select name="name" onChange="selectname(this)"> <option value=""></option> <option value="a">a</option> <option value="b">b</option> <option value="c">c</option> <option value="d">d</option> </select></td> </tr> <tr><td>Lv</td> <td><font color="red">(※)</font></td> <td><select name="level"></select></td> </tr> </table> <button type="submit" name="btnAdd" onClick="add()">追加</button> <font>一覧</font> <table border="1px"> <tbody id="needBody"> <tr> <th>&nbsp;</th> <th>#</th> <th>解放スキル</th> </tr> </tbody> </table> </form> </body> ----------

  • チェックボックス設定の方法教えてください

    チェックボックスの設定方法を教えてください。 項目1.大分類にチェックすると中分類と小分類にもチェックが入る。 項目2.中分類にチェックすると小分類にもチェックが入る。 項目2の設定はわかりますが、項目1の設定がどうしてもできません。 <script language=javascript> function allCheck(obj){ f=obj.form num=obj.name.replace("b","") for(var i=0;i<f.length;i++){ if(f[i].name=="s"+num) f[i].checked=obj.checked; } } </script> <FORM> <TABLE border=0> <TBODY> <TR> <TD class=color_1 rowSpan=4><INPUT onclick=allCheck(this) type=checkbox name=b1>大分類</TD> <TD class=color_1 rowSpan=4><INPUT onclick=allCheck(this) type=checkbox name=b1>中分類</TD> <TD class=color_1><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_1><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_1 rowSpan=3><INPUT onclick=allCheck(this) type=checkbox name=b2>中分類 <P></P></TD> <TD class=color_1><INPUT type=checkbox name=s2>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s2>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s2>小分類</TD></TR></TBODY></TABLE></FORM> すいませんが、教えて下さい。

  • テーブルの行削除について

    以前、テーブルの行追加について教えてもらい出来ましたが 逆に、追加された行を削除する方法を教えてください。 <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=Shift_JIS"> <TITLE>行追加・削除</TITLE> </HEAD> <BODY> <TABLE BORDER="1" id="Table1"> <TR> <TH>タイトルA</TH> <TH>タイトルB</TH> </TR> <TR> <TD><INPUT TYPE="text" SIZE="18" MAXLENGTH="18" NAME="A" VALUE=""></TD> <TD><INPUT TYPE="text" SIZE="18" MAXLENGTH="18" NAME="B" VALUE=""></TD> </TR> </TABLE> <INPUT TYPE="button" VALUE="行追加" onclick="addRow()"> <INPUT TYPE="button" VALUE="行削除"> <script language="JavaScript"> function addRow() { var tbl = document.getElementById("Table1").firstChild; if (!tbl.tagName) { tbl = document.getElementById("Table1"); } var tr = document.createElement("tr"); var td1 = document.createElement("td"); var tx1 = document.createElement("input"); tx1.setAttribute("type","text"); tx1.setAttribute("size","18"); tx1.setAttribute("maxlength","18"); tx1.setAttribute("name","Cn"); tx1.setAttribute("value",""); td1.appendChild(tx1); var td2 = document.createElement("td"); var tx2 = document.createElement("input"); tx2.setAttribute("type","text"); tx2.setAttribute("size","18"); tx2.setAttribute("maxlength","18"); tx2.setAttribute("name","Cn"); tx2.setAttribute("value",""); td2.appendChild(tx2); tr.appendChild(td1); tr.appendChild(td2); tbl.appendChild(tr); } </script> </BODY> </HTML>

  • PHPへチェックボックスの値の渡し方

    御世話になります。 PHPとMySQL(サーバーサイド)とJavascript(クライアントサイド)を使って、会社で製造している各製品の構成部品と数を表すBOM(Bill Of Material)のデータベースを作っています。 Javascriptで動的に生成したチェックボックスの、チェックされた状態をPHPに渡そうとしていますが、上手く行きません。 どなたか、詳しい方のお知恵を拝借できれば有難いと思っております。 今作成中のプログラムは結構長いものなので全部をここにコピーしてくるわけには行きませんが、要点は次の様なものです。 1:クライアントサイドで製品の識別用番号と改訂版番号を入力して、AJAXを使って該当する製品の構成部品とオプション、およびそれぞれの必要数量をサーバーに要求する 2:サイバーでは要求されたデータをデータベースから抽出して、JSON型式でクライアントに送る 3:クライアントは受け取ったデータから、まず複数あるオプションをチェックボックスで選択できるように、チェックボックス、各オプションの番号、その説明文を動的に生成する 4:更にクライアントは必要なオプションを示すチェックボックスにチェックマークを入れ(複数可能)、送信ボタンを押す 5:サーバーはPOSTで受け取った、チェックマークの付いたオプションと、その他の構成部品とそれぞれの数量をテーブル形式でスクリーンに表示する 大まかには以上のような流れになりますが、4:から5:へのチェックボックスの状態がどうしてもPHPに渡せません。 以下に、この問題に関係すると思われるソースコードをコピーします。 <script> function getData(){ var target = document.getElementById("options"); target.value=""; var num = document.getElementById("PN").value; // user input value var rev = document.getElementById("mySelect").value; // selected value document.getElementById("pRev").value=rev; var xmlhttp = new XMLHttpRequest(); // send partNumber + revision as one entity xmlhttp.open("GET", "JSON-TEST4.php?object=" + num + "&revision=" + rev , true); xmlhttp.send(); xmlhttp.onreadystatechange = function(){ //AJAX starts if(this.readyState == 4 && this.status == 200){ var object = JSON.parse(this.responseText); var optCount = object.optionCount; document.getElementById("partID").value= object.id; // hidden input element document.getElementById("optCount").value= optCount;// hidden input element document.getElementById("DS").innerHTML = object.description; // create checkboxes for selecting options for(var i=0; i<optCount; i++){ var checkbox = document.createElement("input"); // make checkbox checkbox.setAttribute("type", "checkbox"); checkbox.setAttribute("name", "check" + (i+1)); checkbox.setAttribute("value", "checked"); var inputPN = document.createElement("input"); // make input for option part number inputPN.setAttribute("type", "text"); inputPN.setAttribute("name", "pn" + (i+1)); inputPN.setAttribute("value", object.optPN[i]); var inputDS= document.createElement("input");// make input for option description inputDS.setAttribute("type", "text"); inputDS.setAttribute("name", "ds" + (i+1)); inputDS.setAttribute("value", object.optDS[i]); inputDS.setAttribute("size", "80"); var br = document.createElement("br"); // paste newly created HTML tags inside <td> with id="options" //target = document.getElementById("options"); target.appendChild(checkbox); target.appendChild(inputPN); target.appendChild(inputDS); target.appendChild(br); } }// if readyState }// AJAX function }// getData() </script> HTML の該当部分は <table class="queryTable"> <tr> <th class="pNum"> Input Part Number</th> <th class="pRev"> Select Revision </th> <th class="pDesc"> Description</th> <th class="pOpt"> Check Options</th> <th class="pAct"> Action </th> </tr> <tr> <td> <form id="myform1" method="POST" action="displayBOMlist.php" target="workspace" > <input type="text" name="instrumentPN" id="PN"><BR> <input type="button" value="show revisions" onclick="showRev()"> </td> <td> <div id="RV"></div> <button type="button" onclick="getData()">show detail</button> </td> <td id="DS"> </td> <td id="options"></td> <td > <input type="hidden" name="partID" id="partID" > <input type="hidden" name="pRev" id="pRev"> <input type="hidden" name="optCount" id="optCount"> <input type="submit" value="Display BOM"> </form> </td> </tr> </table> PHP側の該当部分は $options = array(); for($i= 0; $i < $optCount; $i++){ $checkNum="check".(string)($i+1); $checkPart="pn".(string)($i+1); if( isset($_POST[$checkNum]) ){ $options[]=$_POST[$checkPart]; echo  "set part=".$_POST[$checkNum]."<BR>"; }

    • ベストアンサー
    • PHP

専門家に質問してみよう