- 締切済み
Javascriptの要素名にPHPの配列を組み込みたい
PHP初心者です。 QNo.2695437 QNo.741779 のような 過去のQ&Aも参照させて頂きましたが、 解決できないのでどなたか教えてください。 プルダウンを選択すれば隣のテキストボックスが入力可能となり、 さらに、そのプルダウンの値とテキストボックスに入力された値と その行のシリアルを、配列でPHP側に渡そうとしています。 プルダウンおよびテキストボックスのnameは、 PHP側で動的に生成しています。 このようなかんじです↓ 【PHP側】 for(条件式){ list($serial, $a_code, $a_name) = $res[$i];//DBから取得した値を格納 $html = "<tr>" "<td align='center'>" . $serial . "</td>" "<td align='center'>" "<select name='AAA[".$serial."]' onchange='pullDown(".$serial.")'>" "<option id='AAA' value='" . $a_code . "'>" . $a_name . "</option>" "</select>" "</td>\n" "<td align='center'>" "<input type='text' id='".$serial."' name='BBB[".$serial."]' value='".$BBB."' style='background-color:#D4D0C8;' disabled/></td>\n" "</tr>\n" ; } (「$html .= 」と文末の「;」は見やすく省略しました) 【テンプレート側】 function pullDown(id) { // idには$serialをとりたい var selectedNum = document.forms['frm1'].elements['AAA[id]'].selectedIndex; //これでは正しくオブジェクトが指定できていません if(selectedNum != 0) { document.forms['frm1'].elements['BBB[id]'].disabled = false; document.forms['frm1'].elements['BBB[id]'].style.backgroundColor='#FFFFFF'; } else { document.forms['frm1'].elements['BBB[id]'].disabled = true; document.forms['frm1'].elements['BBB[id]'].style.backgroundColor='#D4D0C8'; } } <html> $htmlを埋め込み <input type='button' value='登録' onclick='登録処理に飛ばします' /> </html> 3次元配列として値をsubmitすれば、 登録処理が簡単になるかと思い、このようなソースになっています。 プルダウンとテキストボックスをうまく連携させ、 かつ配列に値をうまく格納したいのですが、 お知恵を貸してください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
#1です。 JavaScriptの件はよかったですね。 あとは、どれがサーバーサイトで、どれがクライアントサイドのスクリプトかをしっかり認識してコードを組んでください。
- yambejp
- ベストアンサー率51% (3827/7415)
まずoptionが一つしかないselectにonchangeは意味ないですね? changeされる可能性は皆無なのだから・・・・ 定義されていない$BBBがとつぜんでてきたり forの条件式がどうなっているかわからないのに$resを$iで受けてたり どう答えていいのかわからない質問です。 javascriptの部分までたどりつけていないとおもいます。 まずはきちんとHTML部分が書けるようになってから再質問したほうが よいのでは?
こんにちは。 > 【テンプレート側】 > function pullDown(id) { // idには$serialをとりたい > var selectedNum = document.forms['frm1'].elements['AAA[id]'].selectedIndex; //これでは正しくオブジェクトが指定できていません > if(selectedNum != 0) { > .... これだと document.forms['frm1'].elements['AAA[id]'].selectedIndex の「id」が変数ではなく単なる文字列になってしまうので、 document.forms['frm1'].elements['AAA['+id+']'].selectedIndex ではどうでしょう?
補足
教えていただいたように document.forms['frm1'].elements['AAA['+id+']'].selectedIndex の形にしたところ、 Javascriptのエラーはとれて プルダウンを選択すると テキストボックスが入力可能になるように できました!ありがとうございます! あとはこれがPHPの配列に正常に値が引き渡されるか やってみます。
補足
すいません。 文字数減らすために はしょりすぎましたm(_)m DBから Select serial, a_code, a_name From tableA Where ほげほげ で取ってきた値を list($serial, $a_code, $a_name) に入れてます。 そのレコード数$iの分だけForの中でループして、 "<option id='AAA' value='" . $a_code . "'>" . $a_name . "</option>" を動的に生成してあるので、 プルダウンの選択肢は複数になります。 さらに補足しますと、 <tr>から</tr>までをくくるForが外にありまして、 複数行が動的に生成されます。 $BBBは、テキストボックスへの入力値につける変数になります。 Javascriptまではたどりつけているようで、 JSエラーで、 「document.forms.frm1.elements.AAA[id].selectedIndexはNULLもしくは オブジェクトではありません。」 が出ています。