2011-05-03 59 views
2

这可能已经回答过,但我找不到可行的解决方案。加载一个输入框的负载

我需要添加小计输入框并将它们输出为grandTotal。听起来很简单,我认为它会,但由于某种原因,我无法让它正常工作。

要保存我创建了一个的jsfiddle时间 - http://jsfiddle.net/wgrills/hKxgU/4/

编辑:对不起是在发帖的问题差。

我错过了大部分的项目,因为我想加快jsfiddle。我更新了jsFiddle - http://jsfiddle.net/wgrills/hKxgU/7/

如果您单击+或 - 按钮小计更改,这是很好的。但我无法获得#grandTotal输入来更新。问题似乎与:

var grandTotal = 0; 
$(".subtotal").each(function() { 
    $(this).css("border-color","#f00"); 
    grandTotal += $(this).val.split("£")[1]; 
}); 
$("#grandTotal").val("£" + grandTotal); 
alert(grandTotal); 

js的一部分。注意css边界的变化,并且警报就在那里,以确保脚本正常工作。

代码是所有的早期,这只是一个快速的模拟。

+0

请解释在jsFiddle演示中重现问题的步骤,并在此处发布代码的相关部分。 – 2011-05-03 11:11:29

+0

您是否指分项?像在下面添加另一个项目,如“coka可乐”? – Val 2011-05-03 11:22:19

+0

更新原文。请参阅上面的编辑。对不起 – wgrills 2011-05-03 12:08:33

回答

1

你给了两个问题,很容易解决!

你是正确的,你张贴上面的那一块是问题的一部分。特别是行:

grandTotal += $(this).val.split("£")[1]; 

你错过VAL后(),因此代码在这里打破,因为它不知道什么.val.是。

此外,您发布的代码是在return false;之后,这有效地告诉该功能已完成,不要在该行之后执行任何操作。

然而,当你需要的代码段在两种功能(点击)它的价值它包裹在它自己的功能:

function updateGrandTotal() { 
    var grandTotal = 0; 
    $(".subtotal").each(function() { 
     $(this).css("border-color", "#f00"); 
     grandTotal += parseFloat($(this).val().split("£")[1]); 
    }); 
    $("#grandTotal").val("£" + grandTotal); 
    alert(grandTotal); 
} 

,并调用它,你通知功能,其完成之前:

updateGrandTotal(); 
return false; 

See it partially working here

然而,尽管这将在项目上的加工作,你还有另外一个问题,当你滥用一件物品时,箱子变为零,而不是设置£0.00,你把它设置为0,因此,当它尝试拆分"£"时,它不能。为了解决这个问题简单地复制位,你把你的价格值陷入价格从plus功能到minus功能:

替换:

newprice = price * x; 
$('#' + update).val(x); 
$('#' + update + '_subtotal').val(newprice); 

与工作版本:

newprice = (price * x)/100; 
newprice = newprice.toFixed(2); 
newprice = '£' + newprice; 
$('#' + update).val(x); 
$('#' + update + '_subtotal').val(newprice); 

See it fully working here

+0

感谢您的解决方案。我知道它必须是简单的! – wgrills 2011-05-03 12:33:24

+0

完全没问题! _Sorry_我不得不离开办公桌,然后才能完全解决问题,并修复了这一点,但我现在已经将其添加到了答案中。 – Scoobler 2011-05-03 12:54:12

0

您的问题是与以下行:

grandTotal += $(this).val.split("£")[1]; 

val是一个函数,而不是返回对象的属性。你要不要使用以下:

grandTotal += $(this).val().split("£")[1]; 

而且在你的提琴你在你的功能,它位于你的不正确调用val上面的代码中间有一个return false;。删除该返回以及。