0

PHP を使用して、mySQL データベースから動的 HTML テーブルに 30 個のベーカリー アイテムを取得しています。取得されるデータは、ProductItem (主キー)、Weight、およびPriceです。私のコードは、ユーザーが必要なケース数を入力できるように、各アイテムに対してQuantityという INPUT ボックスも作成します。以下は、動的テーブルの生成に使用されるコードの一部です。

        $i=0;

    while ($i < $num) {
        $Item=mysql_result($result,$i,"Item");
        $Product=mysql_result($result,$i,"Product");
        $Weight=mysql_result($result,$i,"Weight");
        $BGPrice=mysql_result($result,$i,"BGPrice");

    echo "<tr>";
    echo "<td>$Product</td>";
    echo "<td><INPUT NAME=Item size=5 value=$Item READONLY></td>";
    echo "<td><INPUT NAME=Weight size=5 value=$Weight READONLY></td>";
    echo "<td><INPUT NAME=Price size=5 value=$BGPrice READONLY></td>";
    echo "<td><INPUT NAME=Quantity size=5 value=0 tabindex=$i></td>";
    echo "<td><INPUT NAME=ExtPrice size=5 value=0 READONLY></td>";
    echo "<td><INPUT NAME=TotalWt size=5 value=0 READONLY></td>";
    echo "</tr>";

    $i++;
    }

ユーザーが注文したいケース数を入力するとすぐに、関数を呼び出して合計価格 ( ExtPrice ) と合計重量 ( TotalWt )の値を計算するには、JavaScript が必要です。

これが私の苦労です。この動的テーブルには 30 個のアイテムがあり、各アイテムの INPUT NAME は同じです。個々の製品のExtPriceTotalWtを更新する関数を作成するにはどうすればよいですか?

4

2 に答える 2

0

inputJavaScript はそれぞれを名前で直接参照しないでください。代わりに、同じ行の隣接するセルへの参照を取得します。

結果を再計算する送信ボタンがあると仮定すると、次の例が表示されます。

document.getElementById("sub").addEventListener("click", function(e) {
    var i, row;
    var rows = document.getElementsByTagName("tr");
    // process each row individually
    for (i = 0, row; row = rows[i++];) {
        totalsForRow(row);
    }
    e.preventDefault();
}, false);

// updates the totals for each row
function totalsForRow(tr) {
    var j, inp, fields = {};
    var inputs = tr.getElementsByTagName("input");
    if (!inputs || inputs.length === 0)
        return;
    // map each input by name
    for (j = 0; inp = inputs[j++];) {
        fields[inp.name] = inp;
    }
    // update totals for this row, using the stored ref to the input
    fields.TotalWt.value = fields.Weight.value * fields.Quantity.value;
    fields.ExtPrice.value = fields.Price.value * fields.Quantity.value;
}

これはエラー チェックを行わず、いくつかの点で改善される可能性があります。これは、1 つのアプローチを説明するためのものです。

実際の例を参照してください。

于 2011-02-23T20:55:35.933 に答える
0

変数を使用して、$i各入力を一意に識別することができます

echo "<td><INPUT NAME=Item id='item$i' size=5 value='$Item' READONLY></td>";

$Itemまた、補足として、スペースなどが含まれている可能性があるため、引用符または二重引用符を使用してラップします..

于 2011-02-23T20:58:23.513 に答える