締切済み

Javascriptの要素名にPHPの配列を組み込みたい

  • すぐに回答を!
  • 質問No.4307047
  • 閲覧数188
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 0% (0/3)

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件)

  • 回答No.3
#1です。
JavaScriptの件はよかったですね。

あとは、どれがサーバーサイトで、どれがクライアントサイドのスクリプトかをしっかり認識してコードを組んでください。
  • 回答No.2

ベストアンサー率 51% (3827/7415)

まずoptionが一つしかないselectにonchangeは意味ないですね?
changeされる可能性は皆無なのだから・・・・

定義されていない$BBBがとつぜんでてきたり
forの条件式がどうなっているかわからないのに$resを$iで受けてたり
どう答えていいのかわからない質問です。

javascriptの部分までたどりつけていないとおもいます。
まずはきちんとHTML部分が書けるようになってから再質問したほうが
よいのでは?
補足コメント
s_w_f

お礼率 0% (0/3)

すいません。
文字数減らすために
はしょりすぎました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もしくは
オブジェクトではありません。」
が出ています。
投稿日時 - 2008-09-07 19:17:23
  • 回答No.1
こんにちは。

> 【テンプレート側】
> 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

ではどうでしょう?
補足コメント
s_w_f

お礼率 0% (0/3)

教えていただいたように
document.forms['frm1'].elements['AAA['+id+']'].selectedIndex
の形にしたところ、
Javascriptのエラーはとれて
プルダウンを選択すると
テキストボックスが入力可能になるように
できました!ありがとうございます!

あとはこれがPHPの配列に正常に値が引き渡されるか
やってみます。
投稿日時 - 2008-09-07 19:44:12
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ