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 で終了する必要があります。また、ifor ループで 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 を追加します。