1

JavaScript のコードがあり、jQuery 計算プラグインを使用しています (リンク テキストからダウンロードできます))。私が持っているフォームは、ショッピング カートのフォームのようなものです。つまり、入力された数量に応じて価格が更新されます。フォームには数字を受け入れるテキスト ボックスがあり、これは数量を示します。この数量が入力/変更されると、同じ価格が更新され、同時に総計も更新されます。現在、テキスト ボックスでのみ作業できます。フォームでチェックボックスとドロップダウン リストを使用できるようにし、価格と総計の更新を JS コードで処理して、すぐに表示できるようにしたいと考えています (現在の既存のテキスト ボックスの場合と同様に)。私は自分のローカルホストでこれを試しましたが、現在の機能を分割して終了したか、更新されたコードがチェックボックスとドロップダウンリストで機能しません。

私がこれまでに持っているフォームは次のとおりです。

 <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="js/jquery.calculation.js" type="text/javascript"></script>


<SCRIPT type="text/javascript">
var bIsFirebugReady = (!!window.console && !!window.console.log);

$(document).ready(
    function (){
        // update the plug-in version
        $("#idPluginVersion").text($.Calculation.version);


        // bind the recalc function to the quantity fields
        $("input[name^=qty_item_]").bind("keyup", recalc);
        // run the calculation function now
        recalc();

        // automatically update the "#totalSum" field every time
        // the values are changes via the keyup event
        $("input[name^=sum]").sum("keyup", "#totalSum");

        // automatically update the "#totalAvg" field every time
        // the values are changes via the keyup event
        $("input[name^=avg]").avg({
            bind:"keyup"
            , selector: "#totalAvg"
            // if an invalid character is found, change the background color
            , onParseError: function(){
                this.css("backgroundColor", "#cc0000")
            }
            // if the error has been cleared, reset the bgcolor
            , onParseClear: function (){
                this.css("backgroundColor", "");
            }
        });

        // automatically update the "#minNumber" field every time
        // the values are changes via the keyup event
        $("input[name^=min]").min("keyup", "#numberMin");

        // automatically update the "#minNumber" field every time
        // the values are changes via the keyup event
        $("input[name^=max]").max("keyup", {
            selector: "#numberMax"
            , oncalc: function (value, options){
                // you can use this to format the value
                $(options.selector).val(value);
            }
        });

        // this calculates the sum for some text nodes
        $("#idTotalTextSum").click(
            function (){
                // get the sum of the elements
                var sum = $(".textSum").sum();

                // update the total
                $("#totalTextSum").text("$" + sum.toString());
            }
        );

        // this calculates the average for some text nodes
        $("#idTotalTextAvg").click(
            function (){
                // get the average of the elements
                var avg = $(".textAvg").avg();

                // update the total
                $("#totalTextAvg").text(avg.toString());
            }
        );
    }
);

function recalc(){
    $("[id^=total_item]").calc(
        // the equation to use for the calculation
        "qty * price",
        // define the variables used in the equation, these can be a jQuery object
        {
            qty: $("input[name^=qty_item_]"), 
            price: $("[id^=price_item_]"),

        },
        // define the formatting callback, the results of the calculation are passed to this function
        function (s){
            // return the number as a dollar amount
            return "$" + s.toFixed(2);
        },
        // define the finish callback, this runs after the calculation has been complete
        function ($this){
            // sum the total of the $("[id^=total_item]") selector
            var sum = $this.sum();

            $("#grandTotal").text(
                // round the results to 2 digits
                "$" + sum.toFixed(2)
            );
        }
    );
}
</SCRIPT> 



<form name="form1" method="post" action="">

<div id="formContent">

  <P id="ex-sum">
  <table width="500">
                <COL style="width: 50px;">
                <COL>
                <COL style="width: 60px;">
                <COL style="width: 110px;">
                <tbody><tr>
                    <th width="179">
                        Qty
                    </th>
                    <th width="164" align="left">
                        Product
                    </th>
                    <th width="72">
                        Price
                    </th>
                    <th width="65">
                        Total
                    </th>
                </tr>
                <tr>
                    <td align="center">
                        <INPUT name="qty_item_1" type="text" class="input" id="qty_item_1" value="1" size="5">
                  </td>
                    <td>Table</td>
                    <td align="center" id="price_item_1">
                        $150
                    </td>
                    <td align="center" id="total_item_1">$</td>
                </tr>
                <tr>
                    <td align="center">
                        <INPUT name="qty_item_2" type="text" class="input" id="qty_item_2" size="5">
                  </td>
                    <td>
                        Pencil</td>
                    <td align="center" id="price_item_2">
                        $100</td>
                    <td align="center" id="total_item_2">$</td>
                </tr>
                <tr>
                    <td align="center">
                        <INPUT name="toys" type="checkbox" id="toys" value="1">
              </td>
                  <td>
                        Toys</td>
                    <td align="center" id="price_item_3">
                        $50</td>
                    <td align="center" id="total_item_3">$</td>
                </tr>  

              <tr>
                    <td align="center"><select name="books" id="books">
                      <option selected="selected">Select an option</option>
                      <option value="1">Book1</option>
                      <option value="1">Book2</option>
                      <option value="1">Book3</option>
                    </select></td>
                  <td>
                        Books</td>
                    <td align="center" id="price_item_3">
                        $10</td>
                    <td align="center" id="total_item_3">$</td>
                </tr>

                <tr>
                    <td colspan="3" align="right">
                        <STRONG>Grand Total:</STRONG>
                    </td>
                    <td align="center" id="grandTotal">$</td>
                </tr>
            </tbody></table>
</div>

</form>

また、上記のフォーム コードを見るとわかるように、テーブルが使用されています。テーブルを使用せずに私がやろうとしていることを達成する方法はありますか?

よろしくお願いします。

4

1 に答える 1

2

本当の答えではありません。コメントに収まらないメモをいくつか。

コピペしただけで、この計算プラグインがどのように機能するかを理解していないように感じます。そして今、他の誰かにそれを理解してもらいたい.

ほんの数例:

  • 使用しないいくつかの関数 (min、max、avg) が含まれており、それらの値を表示する要素も欠落しています。

  • あなたの計算コードは、属性がで始まるinputsをチェックするように構成されていますが、あなたのとはまったく異なる名前属性を持っています。nameqty_item_checkboxselect

  • 再計算は主にイベントにバインドされており、ユーザーがマウスの代わりにキーボードを使用して値を選択しない限り、keyup明らかに発生しません。checkboxselect

  • jQuery フィールド プラグインを使用していないようですが、計算プラグインのホームページには、異なる入力を使用する場合に必要であると記載されています。text


しかし、あなたが私を良い気分にさせてくれたので、あなたのコードに基づいて簡単な動作デモ ページを作成しました。

http://jsbin.com/asepe3

しかし、これ以上説明しません。また、健全性チェック (正の整数のみを許可) が欠落しており、その他のものもあります。

于 2009-12-10T23:31:56.853 に答える