这是我的代码:
<script type = "text/javascript" >
var apple_price = 5;
var banana_price = 10;
var orange_price = 15;
function apple_subtotal (num_apple) //returns the cost of apples:
{
if (num_apple > 5 ) {
return apple_price * num_apple * 0.9;
} else {
return apple_price * num_appl;
}
}
function banana_subtotal (num_banana) //returns the cost of bananas:
{
if (num_banana > 5 ) {
return banana_price * num_banana * 0.9;
} else {
return banana_price * num_banana;
}
}
function orange_subtotal (num_orange) // Returns the cost of oranges:
{
if (num_orange > 5 ) {
return orange_price * num_orange * 0.9;
} else {
return orange_price * num_orange;
}
}
function grand_subtotal(num_apple, num_banana, num_orange) // returns the total cost of all items combined:
{
var a = apple_subtotal(num_apple);
var b = banana_subtotal(num_banana);
var c = orange_subtotal(num_orange);
var d = num_apple + num_banana + num_orange;
if (d > 10 ) {
return (a + b + c) * 1.07 * 0.95;
} else {
return (a + b + c) * 1.07;
}
}
</script>
<form action="">
Number of Apples: <input type="text" name="apples" size="3" /></br> <!-- Variable for number of apples -->
Number of Bananas: <input type="text" name="bananas" size="3" /></br> <!-- Variable for number of bananas -->
Number of Oranges: <input type="text" name="oranges" size="3" /></br> <!-- Variable for number of oranges -->
<input type="button" value="total" onclick="document.forms[0].grand_total.value = grand_subtotal(document.forms[0].apples.value, document.forms[0].bananas.value, document.forms[0].oranges.value)" /></br> <!-- Button to calculate the grand total -->
Grand Total: $<input type="text" name="grand_total" /> <!-- Grand total display -->
</form>
基本上,我写的代码是为我所在的课程假装在线商店。如果您订购超过10件商品,您将获得5%的折扣。我的问题是我无法正确计算总数,而是无论购买金额多少,总是会应用折扣。有没有办法提取表单部分中的信息并将其调用到正在进行计算的宏子总计部分?
答案 0 :(得分:0)
在您的帖子中,您说“如果您订购的商品超过10件,则会获得5%的折扣”,但在您的代码中:
if (num_apple > 5 ) {
return apple_price * num_apple * 0.9;
}
所以你给超过5件而不是10件的折扣,给予10%的折扣,而不是5%。您可以使用以下方法简化此代码:
function apple_subtotal (num_apple) {
return apple_price * num_apple * (num_apple > 10? 0.95 : 1);
}
但这会对整个订单应用10%的折扣,而不仅仅是那些超过10的折扣(也许这就是你想要的,也许不是)。
另一个问题是表单值总是字符串,所以当你这样做时:
var d = num_apple + num_banana + num_orange;
您正在连接值,而不是添加它们。因此,如果有人订购了1个苹果,0个香蕉和0个橙子,那么你有:
var d = '1' + '0' + '0'; // '100'
要使+
运算符执行加法而不是连接,请将它们全部设为数字。一些选择:
var d = +num_apple + +num_banana + +num_orange;
var d = Number(num_apple) + Number(num_banana) + Number(num_orange);
var d = parseInt(num_apple, 10) + parseInt(num_banana, 10) + parseInt(num_orange, 10);
您在其他功能中没有此问题,因为它们没有添加。使用减法,除法和乘法运算符,参数首先转换为数字(如果它们可以),即使它们是字符串。
此外,你有:
<input type="button" value="total" onclick="document.forms[0].grand_total.value = grand_subtotal(document.forms[0].apples.value, document.forms[0].bananas.value, document.forms[0].oranges.value)">
请注意,表单控件具有表单属性,该属性引用它们所在的表单,因此:
<input type="button" value="total" onclick="
this.form.grand_total.value = grand_subtotal(this.form.apples.value, this.form.bananas.value, this.form.oranges.value)">
但所有这些在单独的函数中会更好,而不是内联侦听器。
答案 1 :(得分:0)
你可以试试这个:
用这个替换你的grand_subtotal函数:
function grand_subtotal(num_apple, num_banana, num_orange) // returns the total cost of all items combined:
{
var a = apple_subtotal(+num_apple);
var b = banana_subtotal(+num_banana);
var c = orange_subtotal(+num_orange);
alert(c);
var d = (+num_apple) + (+num_banana) + (+num_orange);
if (d > 10) {
return (a + b + c) * 1.07 * 0.95;
}
else {
return (a + b + c) * 1.07;
}
}