JavaScriptで質問です。


配列の値を参照しようとすると以下のエラーが表示されます。
「'value'はnullまたオブジェクトではありません。」

エラーになる部分
--------------------------------------------------------
var order = document.getElementsByName("order[]");

for (var i = 0; i <= 10; i++) {
params['list['+ i + '][order]'] = order[i].value;
}
--------------------------------------------------------

ただ、alertで確認するときはきちんと値をとってこれています。
--------------------------------------------------------
var order = document.getElementsByName("order[]");

for (var i = 0; i <= 10; i++) {
alert(order[i].value);
}
--------------------------------------------------------
この場合はきちんとメッセージに意図した値が表示されます。


何か対処方法、原因がわかるかたご回答お願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/09/21 13:57:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:TransFreeBSD No.3

回答回数668ベストアンサー獲得回数268

ポイント100pt

とりあえず、IE8,Chromeにおいて、下記で問題は発生しません。id:Lhankor_Mhyさんの言う通り、余所に問題があると思います。


<html><body><form>
<input type="text" name="order[]" value="0"><br>
<input type="text" name="order[]" value="1"><br>
<input type="text" name="order[]" value="2"><br>
<input type="text" name="order[]" value="3"><br>
<input type="text" name="order[]" value="4"><br>
<input type="text" name="order[]" value="5"><br>
<input type="text" name="order[]" value="6"><br>
<input type="text" name="order[]" value="7"><br>
<input type="text" name="order[]" value="8"><br>
<input type="text" name="order[]" value="9"><br>
<input type="text" name="order[]" value="10"><br>
</form><script>
var params = {};
var order = document.getElementsByName("order[]");
for (var i = 0; i <= 10; i++) {
  params['list['+ i + '][order]'] = order[i].value;
}
for (var i in params) {
  alert(i + ": " + params[i]);
}
</script></body></html>
id:Ryo0524

回答ありがとうございます。

実際はRubyとJavaScriptを連動して開発をしており、for文のiの最大値は本当のソースではRubyから送った変数を参照するようになっています。

この変数の値が配列の添字の最大値よりも大きかったため、存在しない配列のvalueを取得しようとしていたことでエラーになっていたようです。

初歩の初歩でミスをしていました。

回答してくださったみなさん、ありがとうございました。

2011/09/21 13:57:02

その他の回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

params['list['+ i + '][order]'] = order[i].value;


この行で

params['list['+ i + '][order]']とやってますが

このとき orderには 何が 入っているのでしょうか?


このorderが原因で エラーになってる感じがしますが。

id:Jupiter2100 No.2

回答回数444ベストアンサー獲得回数74

配列paramの添え字が間違っているのではないでしょうか?

下記のようにしてみてはどうでしょう?

var order = document.getElementsByName("order[]");

for (var i = 0; i <= 10; i++) {
    params[list[i][order]] = order[i].value;
}
id:TransFreeBSD No.3

回答回数668ベストアンサー獲得回数268ここでベストアンサー

ポイント100pt

とりあえず、IE8,Chromeにおいて、下記で問題は発生しません。id:Lhankor_Mhyさんの言う通り、余所に問題があると思います。


<html><body><form>
<input type="text" name="order[]" value="0"><br>
<input type="text" name="order[]" value="1"><br>
<input type="text" name="order[]" value="2"><br>
<input type="text" name="order[]" value="3"><br>
<input type="text" name="order[]" value="4"><br>
<input type="text" name="order[]" value="5"><br>
<input type="text" name="order[]" value="6"><br>
<input type="text" name="order[]" value="7"><br>
<input type="text" name="order[]" value="8"><br>
<input type="text" name="order[]" value="9"><br>
<input type="text" name="order[]" value="10"><br>
</form><script>
var params = {};
var order = document.getElementsByName("order[]");
for (var i = 0; i <= 10; i++) {
  params['list['+ i + '][order]'] = order[i].value;
}
for (var i in params) {
  alert(i + ": " + params[i]);
}
</script></body></html>
id:Ryo0524

回答ありがとうございます。

実際はRubyとJavaScriptを連動して開発をしており、for文のiの最大値は本当のソースではRubyから送った変数を参照するようになっています。

この変数の値が配列の添字の最大値よりも大きかったため、存在しない配列のvalueを取得しようとしていたことでエラーになっていたようです。

初歩の初歩でミスをしていました。

回答してくださったみなさん、ありがとうございました。

2011/09/21 13:57:02
  • id:Lhankor_Mhy
    分からんけど、回答はどちらも違う気がするなあ……
    提示されていない部分のソースに問題がある気がする
  • id:Lhankor_Mhy
    var order = document.getElementsByName("order[]");

    for (var i = 0; i <= 10; i++) {
    alert(params['list['+ i + '][order]']);
    alert(order[i].value);
    params['list['+ i + '][order]'] = order[i].value;
    }

    って書いたら何が起こるんだろ。ソース見てる感じだと、PHPに配列渡したいのかな、と思ったり。
  • id:Lhankor_Mhy
    「 alert させると動く」っていうのは、ひょっとしてループと非同期で name="order[]" の要素の value が書き換えられてるとかじゃないかな。少し時間が経つと value が存在するけど、alert が入らない状態だと null になってるとか。
  • id:TransFreeBSD
    単純に要素が足りないと似たようなエラーになりますね。正確には
    「'order[...].value' は Null またはオブジェクトではありません。」
    です。MSはやっぱりなんだか外れたメッセージだ。
    input要素をa要素に変えてvalueをなくしても、単にnullが代入されてエラーにはならなかったです。

    ちなみにchromeだと
    「Uncaught TypeError: Cannot read property 'value' of undefined」
    こっちの方がまだわかる。ただ、コンソールのメッセージがコピペできん...

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません