1

私はこの簡単なスクリプトを持っています。チェックされた値を取得して、無効化された入力ボックスにある現在の合計に追加しようとしています。オプションがチェックされていることは知っていますが、入力ボックスに更新されておらず、その理由がわかりません。誰でも私を助けることができますか?

<html>
<head>
<script type="text/javascript">
    function updateForm()
    {
        var type = document.pizzaForm.pizzaType;
        var toppings = document.pizzaForm.toppings; 
        var pizzaType;
        var toppings;

        for(var i = 0; i <= type.length; i++)
        {
            if(type[i].checked)
            {
                total = type[i].value;
            }
        }

        for(var i = 0; i <= toppings.length; i++)
        {
            if(toppings[i].checked)
            {
                toppings += toppings[i].value;
            }
        }

        var total = pizzaType + toppings;

        pizzaForm.total.value = total;
    }
</script>
</head>
<body>
    <h1>Order Pizza Here:</h1>
    <form action="" method="get" name="pizzaForm">
        What Type of Pizza Would You Like? <br />
        <input type="radio" name="pizzaType" value="10.00" onchange="updateForm()" />Vegetarian<br />
        <input type="radio" name="pizzaType" value="20.00" onchange="updateForm()" />Meat Lovers<br />
            <br />
            <br />
        Extra Toppings: <br />
        <input type="checkbox" name="toppings" value="2.00" onchange="updateForm()" />Extra Cheese <br />
        <input type="checkbox" name="toppings" value="3.00" onchange="updateForm()" />Mushrooms <br />
        <input type="checkbox" name="toppings" value="4.00" onchange="updateForm()" />Anchovies <br />
            <br />
        Total <input type="text" disabled="disabled" name="total" />
    </form>
</body>
</html>
4

2 に答える 2

5

いくつかの基本的な Javascript エラーがあります。

  1. for ループは次のようになります。

    for(var i = 0; i <= type.length; i++)
    

    これは、それらが 0 から長さ (長さを含む) = 長さ + 1
    になることを意味します。

    for(var i = 0; i < type.length; i++)
    

    違いがわかりますか?<=です<(1エラーでオフ?)

  2. toppings変数を 2 回使用しています。(javascript はこれが非常に苦手で、自分の足を撃つことができます。)また、すべての値を初期化する必要があります。

    var type = document.pizzaForm.pizzaType;
    var toppings = document.pizzaForm.toppings; 
    var pizzaTypeValue = 0;
    var toppingsValue = 0;
    

    Value要素ではなく数値を保持する変数にも追加しました。要素のリストではなく値を保持していることを覚えておくために、これまたはそのような規則にプレフィックスを付ける場合もあります。

  3. マークアップの値は、parseFloat(それらを float に変換するために使用される文字列です。

    pizzaTypeValue += parseFloat(type[i].value); 
    

    手段にも注意してください+=:これを私に追加してください。に相当しpizzaTypeValue = pizzaTypeValue + ...ます。

  4. 合計変数は実際には必要ありません。合計であることを覚えておきたい場合は、コメントを追加してください。

このjsFiddle: http://jsfiddle.net/F53ae/を参照して、動作を確認してください。

于 2011-09-29T02:43:39.810 に答える
1

これが作業コードです。私はあなたのためにそれをjsfiddleに入れました。主な問題は、トッピングという名前の 2 つの変数があったことです。また、最初のループでは、他の合計を設定するつもりだったときに、「合計」変数を設定していました。見てみな。 http://jsfiddle.net/eXPAj/1/

于 2011-09-29T02:44:29.053 に答える