forループでオンザフライでバリアベルを作成しようとしています。エラー。私がやろうとしているのは、32 個のテキスト フィールドの値を取得し、それらの値を変数に格納しようとすることです。
for (i = 1; i<=32;i++){
q[i] = document.getElementById('qty[i]').value;
}
しかし、これは次のようになります。
エラー: 'q' は定義されていません
forループでオンザフライでバリアベルを作成しようとしています。エラー。私がやろうとしているのは、32 個のテキスト フィールドの値を取得し、それらの値を変数に格納しようとすることです。
for (i = 1; i<=32;i++){
q[i] = document.getElementById('qty[i]').value;
}
しかし、これは次のようになります。
エラー: 'q' は定義されていません
var q = [];
for (var i = 0; i < 32; i++){
q[i] = document.getElementById('qty[i]').value;
}
q
すべての値が含まれます。q
一般的に受け入れられているベスト プラクティスであるため、for ループの外で配列を宣言する必要があります。まったく宣言q
しないと、暗黙のグローバル変数になるので、おそらく避けたいものです。ループ内で宣言するq
と、反復ごとにオーバーライドされるため、必ず外側で宣言する必要があります。
for
また、ループを次から変更したことに注意してください。
for(i = 1; i <= 32; i++) {
これに:
for (var i = 0; i < 32; i++){
1 から 32 までループしています。Javascript の配列は 0-index であるため、これは正しくありません。つまり、ゼロからカウントを開始します。これが事実であるため、for
ループもゼロからカウントを開始し、31 で終了する必要があります。また、i
for ループで var を宣言する必要があります。それ以外の場合は、グローバル変数になります。
ここで、for ループの外で宣言したくない場合q
は、Kirian が示したようにすることができます。つまり、if
ステートメントを使用しq
て が既に宣言されているかどうかを判断し、宣言されていない場合は宣言します。それは次のようになります。
for (var i = 0; i < 32; i++){
if(!q) q = [];
q[i] = document.getElementById('qty[i]').value;
}
もう 1 つの注意点として、qty
がコード内の配列である場合は、代わりにこれが必要になる可能性があります。
var q = [];
for (var i = 0; i < 32; i++){
q[i] = document.getElementById(qty[i]).value;
}
qty
のように見える一連の ID の一部である場合は、次のようにしqty[1], qty[2], qty[3]...
ます。
var q = [];
for (var i = 0; i < 32; i++){
q[i] = document.getElementById('qty[' + i + ']').value;
}
やってみました:
var q = [];
for (var i = 0; i < 32; i++){
q.push(document.getElementById('qty[i]').value);
}
この構文q.push(x)
は、配列の末尾に x を追加します。