-1
function dadosFormularios() {
    var dadosFormulario = {};
    var iterador = countForms;
    var i = 0;
    while (i < iterador) {
        dadosFormulario[i] = {};
        dadosFormulario[i]['a'] = $('#field\\[' + i + '\\]\\[a\\]').val();
        dadosFormulario[i]['b'] = $('#field\\[' + i + '\\]\\[b\\]').val();
        //alert(dadosFormulario[i]['a']);
        //alert(dadosFormulario[i]['b']);   
        i++;
    }
    var qstring = '';
    var tmp_qstring = [];
    var temp1, temp2;
    var aux_i = i + 1;
    alert(aux_i);
    for (var j = 0; j < aux_i; j++) {
        temp1 = dadosFormulario[j]['a'];
        alert(temp1);
        temp2 = dadosFormulario[j]['b'];
        //alert(temp1);
        tmp_qstring[j] = 'a' + j + '=' + temp1 + '&' + 'b' + j + '=' + temp2;
    }
    qstring = tmp_qstring.join('&');
    alert(qstring);
    window.location = 'dup1.php?' + qstring;
}

ボタンをクリックすると、上記の関数を呼び出します。コードでわかるように、オブジェクトの配列のデータを別のページに送信しようとしています。

私の問題は、varを設定しdadosFormulario[j]['a'];たり、 iedadosFormulario[j]['b'];に直接設定したりすると、問題が発生することです。Chromeコンソールでエラーが発生します:tmp_qstringtmp_qstring[j]=dadosFormulario[j]['b'];

Uncaught TypeError:未定義のプロパティ'a'を読み取ることができません

4

1 に答える 1

4

使用するループを修正します。

j < i

配列とイテレータ変数のj両方がゼロベースであるためです。イテレータが配列の長さ-1(iこの場合は長さ)に達したら、反復を停止する必要があります。これは通常、for配列の長さにわたるループの場合です。

j <= i反復インデックスが配列の終了境界から外れるまで反復する場合。

于 2012-07-13T14:13:51.087 に答える