プロが教える店舗&オフィスのセキュリティ対策術

現在、PHPで生成したhiddenフィールドに、Valueを設定しない記述(配列のような形式)を行い、JavaScriptにて値を代入するプログラムを作っています。
エラーは出ていないようなのですが、値が代入されません。Alertでみると、undefinedというメッセージが出ています。hiddenフィールドへの格納方法をご教授ください。

<ソース>(抄)
function user_num() {
var i=1,l=0, num = document.getElementById('users').length;
document.user_select.user_no =new Array(num);
while(num > 0){
document.getElementsByName('user_no[i]').value = document.getElementById('users').options[l].value;

alert(document.getElementsByName('user_no[i]').value);
num--;
i++;
l++;
}
}
(中略)
hiddenフィールド生成文

<?php
$n=1;
while($i){
print '<input type="hidden" name="user_no[';
print $n;
print ']"';
print ' id="user_no[';
print $n;
print ']">';
$i=$i-1;
$n=$n+1;
}
?>

A 回答 (2件)

#1です。


サンプルは動いた。うまくはいきません。ではどうしたらいいのかサッパリわからないです。

(それを配列と呼ぶかどうかはわかりませんが)nameとvalueが設定されたinputがform配下にあればformの送信時に送られるハズなんですけどね~。

それとも送信ではなく受け取り側(次のページ)に問題があるのでしょうか?(送信できたかどうかはformのmethodをgetにしておけば簡単に確認できますが)

とりあえずサンプルが動いたことで続きを自分で解決するなら質問を終了する、そうでなければ第三者がわかるような情報を捕捉するかしてくださいませ。
    • good
    • 0

nameに[n]を付けた配列みたいな記述が配列として扱えるのはphpの勝手な拡張ですので、php以外では単なる文字列となります。


なので、javascriptで扱う場合はあくまで文字列にしてやる必要があります。
また、getElementsByNameというのは常に配列を返してくるので、それが必ず1つしか無いケースでは0番目にアクセスします。

以下、試してないけどサンプル。
function user_num() {
var i=1;
while(1){
var o= document.getElementsByName('user_no['+i+']')[0];
if(! o) break;
o.value = document.getElementById('users').options[i-1].value;
alert(o.value);
i++;
}
document.user_select.user_no = new Array(i);
}

最後のところ document.user_select.user_no には新しい配列を代入してるけど何に使ってるのかわからないのでとりあえずそのままにしてます。

この回答への補足

早速のご回答ありがとうございます。サンプルうまく動きました。

最終的には、配列(文字列)user_no[1]、user_no[2]をpostまたは、getで
次のページに渡してあげたく思っています。そのため、user_no[1]などを
hiddenフィールドで生成しているのですが、うまくいきません。

補足日時:2009/11/11 11:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!