0

ループ内で、そのループ反復内の現在のオブジェクトを関数に渡す関数が呼び出されるコードをいくつか書きました。

問題は、オブジェクトが動的で、obj パラメーターにしかアクセスできないため、オブジェクトの使用方法がわからないことです。

Javascript

objectifyTableRow(val, i); // Populate object with properties and values

Val は、関数 objectifyTableRow に渡されるオブジェクトです

function objectifyTableRow(objRow, count) { // Create objects for calculations

    var ii = 0;
    $('#ctl00_PageContent_freight_rate_column_chaair_r' + count + " " + 'td').each(function(i, val) { // begin each
        /* Concatenate column name with subcolumn name. example objFobCost.China/Sea Origin,Air */
        if (i < 3) { // columns 0,1,2 in table row
            if (ii < arraySubColumn.length) { // Air, Sea/air, sea subcolumns
                var PropertyName = arrayColumns[0] + arraySubColumn[ii];


                objRow[PropertyName] = parseFloat($(val).html()); // Set key name with var PropertyName 

                ii += 1;
            }

            if (ii == 3) { // Reset counter
                ii = 0;
            }
        } // end of outer if

        else if (i > 2 & i < 6) {
            if (ii < arraySubColumn.length) { // Air, Sea/air, sea subcolumns
                var PropertyName = arrayColumns[1] + arraySubColumn[ii];

                objRow[PropertyName] = parseFloat($(val).html());

                ii += 1;
            }

            if (ii == 3) { // Reset counter
                ii = 0;
            }
        } // end of outer if

        else if (i > 5 & i < 9) {
            if (ii < arraySubColumn.length) { // Air, Sea/air, sea subcolumns
                var PropertyName = arrayColumns[2] + arraySubColumn[ii];

                objRow[PropertyName] = parseFloat($(val).html());

                ii += 1;
            }

            if (ii == 3) { // Reset counter
                ii = 0;
            }
        } // end of outer if

        else if (i > 8 & i < 12) {
            if (ii < arraySubColumn.length) { // Air, Sea/air, sea subcolumns
                var PropertyName = arrayColumns[3] + arraySubColumn[ii];

                ii += 1;
            }

            if (ii == 3) { // Reset counter
                ii = 0;
            }
        } // end of outer if

        else {
            if (ii < arraySubColumn.length) { // Air, Sea/air, sea subcolumns
                var PropertyName = arrayColumns[4] + arraySubColumn[ii];

                           ii += 1;
            }

            if (ii == 3) { // Reset counter
                ii = 0;
            }
        } // end of else
    });                  // end of each loop TD
    beginCalc(objRow);
};

各オブジェクトは beginCalc に渡されるため、ID、キー、および値に基づいて計算を行うことができます

function beginCalc(obj) {
    // Every obj used is passed to here
    $.each(obj, function(key, element) {
    alert('ID: ' + obj[this.id] + '\n' + 'key: ' + key + '\n' + 'value: ' + element); // Check correct obj id, key and value
});

私がこれを行っている理由は、オブジェクトが asp.net グリッドからの値を格納しているためです。グリッド行ごとにオブジェクトを作成し、obj.key: value * obj を選択してコードで計算を行う方がクリーンだと思いました。 .key: 値。getDocumentByElementId を使用するのではなく。

beginCalc 関数の ID でこれらのオブジェクトにプログラムでアクセスする方法はありますか?

ありがとう

4

1 に答える 1

0

必要なのは、DOM ノードと値の間の接続です。このアプローチを試してください(疑似コード):

var nodes = $(...select all the nodes...);
nodes.each( function( index, node ) {
    var obj = { node: node };
    beginCalc(obj);
} );

ではbeginCalc()、 を使用して DOM ノードにアクセスできるようになりましたobj.node。同じアプローチを使用して、より多くのデータをオブジェクトに配置して、すべてを 1 つの場所 (更新する必要がある DOM ノード + 更新する必要があるすべてのデータ) に保持できます。

于 2012-07-05T14:08:01.853 に答える