Javascript无线电/复选框问题



我有这个简单的脚本。我试图得到选中的值,并将它们添加到运行总数,这是在禁用输入框。我知道它被选中的选项,但它没有更新到输入框,我不知道为什么。有人能帮我吗?

<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>

你有几个基本的Javascript错误:

  1. 你的for循环看起来像:

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

    这意味着它们将从0到长度(包括长度)=长度+ 1
    应该是:

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

    看到区别了吗?<=变成了<

  2. 您使用toppings变量两次。(javascript在这方面真的很糟糕,让你搬起石头砸自己的脚。)你应该初始化所有的值。

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

    我还将Value添加到保存数字而不是元素的变量中。其他人可能会给this加上前缀或其他类似约定,以记住它保存的是一个值,而不是一个元素列表。

  3. 标记中的值是字符串,使用parseFloat(将它们转换为浮点数:

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

    也注意+=的意思:把这个加给我。相当于pizzaTypeValue = pizzaTypeValue + ...

  4. 实际上不需要total变量。

查看jsFiddle: http://jsfiddle.net/F53ae/查看它的实际操作

下面是工作代码。我是为了你才放的。主要问题是有两个名为toppings的变量。此外,在第一个循环中,当您打算设置另一个total时,您正在设置"total"变量。看看吧。http://jsfiddle.net/eXPAj/1/

相关内容

  • 没有找到相关文章

最新更新