1

ユーザーが定義した名前と電子メール アドレスを mysql データベースに書き込むフォームがあります。私が問題を抱えている部分は、チェックボックスに値を割り当て、「合計」として定義されている合計を与えるフォームの二次部分があることです。この合計を同じデータベースに書き込みたい。私はJSでコーディングするのが初めてで、ユーザーが値を確立した後に合計を渡す方法がよくわかりません。

<form name="form1">
    <input type="checkbox" name="check[]" data-weight="5" /> 5<br />
    <input type="checkbox" name="check[]" data-weight="10" /> 10<br />
    <input type="checkbox" name="check[]" data-weight="30" /> 30<br />
    <div>Total: <span id="total">0</span></div>
</form>

<script type="text/javascript">
    (function () {
        var totalEl = document.getElementById('total');
        var total = 0;
        var checkboxes = document.form1['check[]'];

        var handleClick = function () {
            total += parseInt(this.getAttribute('data-weight'), 10) * (this.checked ? 1 : -1);
            totalEl.innerHTML = total;
        };

        var l = checkboxes.length;
        for (i = 0; i < l; ++i) {
            checkboxes[i].onclick = handleClick;
        }
    }());
</script>
4

2 に答える 2

1

まず第一に: Javascript が無効になっている場合でも動作するはずですか? または、フォームが送信されても​​、間違っているか、値がデータベースに書き込まれていない可能性がありますか?

構わないなら

Javascript を有効にせずにユーザーからデータベースに取得したものは、AvL の提案に従うことができます。

ただし、正しい値が必要な場合

次に、Javascript サポートに依存していないことを確認する必要があります。Javascript で計算を行わずに送信された場合でも、フォームが常に一貫した値を提供することを確認する必要があります。

この場合、クライアント側ではなくサーバー側で計算を行う必要があります。もちろん、クライアント側で計算を行うこともできますが、クライアント側のユーザー インターフェイスに対してのみクライアント側の計算を行うことです (最終データではありません)。

サーバー側の処理についてはわかりません。そのため、サーバー側の計算やデータベースへの値の保存のためのコードを提案していません。したがって、私の唯一の提案は、check[]ビット配列をサーバー側で処理することです。

必要に応じて、サーバー/データベース/処理をより適切に説明し、変更についてのメモを私の回答へのコメントとして残すことができます。

更新: これは基本的に、 pstが質問にコメントした内容についてのより長い説明です。

于 2012-09-03T18:14:00.410 に答える
0

非表示の入力要素を追加できます。

<input id="totalChecked" type="hidden" name="total" value="0" />

関数に以下を追加します。

document.getElementById('totalChecked').value = total;

このフィドルをチェックしてください

于 2012-09-03T15:25:28.593 に答える