配列の値を参照しようとすると以下のエラーが表示されます。
「'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);
}
--------------------------------------------------------
この場合はきちんとメッセージに意図した値が表示されます。
何か対処方法、原因がわかるかたご回答お願いします。
とりあえず、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>
params['list['+ i + '][order]'] = order[i].value;
この行で
params['list['+ i + '][order]']とやってますが
このとき orderには 何が 入っているのでしょうか?
このorderが原因で エラーになってる感じがしますが。
配列paramの添え字が間違っているのではないでしょうか?
下記のようにしてみてはどうでしょう?
var order = document.getElementsByName("order[]"); for (var i = 0; i <= 10; i++) { params[list[i][order]] = order[i].value; }
とりあえず、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>
回答ありがとうございます。
実際はRubyとJavaScriptを連動して開発をしており、for文のiの最大値は本当のソースではRubyから送った変数を参照するようになっています。
この変数の値が配列の添字の最大値よりも大きかったため、存在しない配列のvalueを取得しようとしていたことでエラーになっていたようです。
初歩の初歩でミスをしていました。
回答してくださったみなさん、ありがとうございました。
回答ありがとうございます。
実際はRubyとJavaScriptを連動して開発をしており、for文のiの最大値は本当のソースではRubyから送った変数を参照するようになっています。
この変数の値が配列の添字の最大値よりも大きかったため、存在しない配列のvalueを取得しようとしていたことでエラーになっていたようです。
初歩の初歩でミスをしていました。
回答してくださったみなさん、ありがとうございました。