2

forループでオンザフライでバリアベルを作成しようとしています。エラー。私がやろうとしているのは、32 個のテキスト フィールドの値を取得し、それらの値を変数に格納しようとすることです。

for (i = 1; i<=32;i++){
   q[i] = document.getElementById('qty[i]').value;
}

しかし、これは次のようになります。

エラー: 'q' は定義されていません

4

2 に答える 2

3
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;
}
于 2012-04-26T00:23:24.530 に答える
1

やってみました:

var q = [];
for (var i = 0; i < 32; i++){
  q.push(document.getElementById('qty[i]').value);
}

この構文q.push(x)は、配列の末尾に x を追加します。

于 2012-04-26T00:23:32.250 に答える