添加一大堆输入框

时间:2011-05-03 11:08:48

标签: javascript jquery html

之前可能已经回答过,但我找不到有效的解决方案。

我需要添加小计输入框并将其输出为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边框更改,警报就在那里,以确保脚本正常工作。

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

2 个答案:

答案 0 :(得分:1)

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

你说的是你发布的上面的部分是问题的一部分。特别是这一行:

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

你在val之后错过了(),所以代码 WOULD 在这里打破了,因为它不知道.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

答案 1 :(得分:0)

您的问题出在以下几行:

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

val是一个函数,而不是返回对象的属性。您需要以下内容:

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

同样在你的小提琴中,你的函数中间有return false;,它位于你正在调用val的代码上方。也删除该返回。