我有这个简单的脚本。我试图得到选中的值,并将它们添加到运行总数,这是在禁用输入框。我知道它被选中的选项,但它没有更新到输入框,我不知道为什么。有人能帮我吗?
<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错误:
-
你的for循环看起来像:
for(var i = 0; i <= type.length; i++)
这意味着它们将从0到长度(包括长度)=长度+ 1
应该是:for(var i = 0; i < type.length; i++)
看到区别了吗?
<=
变成了<
。 -
您使用
toppings
变量两次。(javascript在这方面真的很糟糕,让你搬起石头砸自己的脚。)你应该初始化所有的值。var type = document.pizzaForm.pizzaType; var toppings = document.pizzaForm.toppings; var pizzaTypeValue = 0; var toppingsValue = 0;
我还将
Value
添加到保存数字而不是元素的变量中。其他人可能会给this加上前缀或其他类似约定,以记住它保存的是一个值,而不是一个元素列表。 -
标记中的值是字符串,使用
parseFloat(
将它们转换为浮点数:pizzaTypeValue += parseFloat(type[i].value);
也注意
+=
的意思:把这个加给我。相当于pizzaTypeValue = pizzaTypeValue + ...
-
实际上不需要total变量。
查看jsFiddle: http://jsfiddle.net/F53ae/查看它的实际操作
下面是工作代码。我是为了你才放的。主要问题是有两个名为toppings的变量。此外,在第一个循环中,当您打算设置另一个total时,您正在设置"total"变量。看看吧。http://jsfiddle.net/eXPAj/1/