2

我正在尝试获取用户附加到购物车的项目的小计,但似乎无法使其正常工作。

基本上我有一个项目列表,上面有一个添加到购物车按钮,该按钮链接到一个 jquery 函数,该函数将一些 html 附加到购物车:

$('#object01').click(function(){
    if ($('#slideShoppingCart').is(":hidden")) {
    $('#slideShoppingCart').slideToggle(500);   
    $('#objectList').append('<div class="shoppingCartObject"><img src="img/leather-backpack-cart.jpg" width="75" height="75"><div class="cartObjectInfo"><h1 class="cartTitle">Gentleman&#39;s Satchel</h1><div class="closeCartObject">x</div><h2 class="cartDescription">Chestnut Leather</h2><h3 class="quantity">QTY. 1</h3><h3 class="cartPrice">£<span class="price">300</span></h3></div></div>')
    } else {
        $('#objectList').append('<div class="shoppingCartObject"><img src="img/leather-backpack-cart.jpg" width="75" height="75"><div class="cartObjectInfo"><h1 class="cartTitle">Gentleman&#39;s Satchel</h1><div class="closeCartObject">x</div><h2 class="cartDescription">Chestnut Leather</h2><h3 class="quantity">QTY. 1</h3><h3        class="cartPrice">£<span class="price">300</span></h3></div></div>')
    }
    });
    $('.closeCartObject').live('click', function() {
    $(this).parent().parent().remove();

    return false;
});

其中我将价格包含在一个名为 price 的类中。然后我的购物车中有一个 id 为 total 的 span。

我有这个函数来计算价格,这似乎不起作用。

$(document).ready(function getTotal(){
var total = 0;
$('.price').each(function(){
    total += parseFloat(this.innerHTML)
});
$('#total').text(total);
getTotal();
});
4

3 回答 3

1

你的功能:

$(document).ready(function getTotal(){
var total = 0;
$('.price').each(function(){
    total += parseFloat(this.innerHTML)
});
$('#total').text(total);
getTotal();
});

包含从 getTotal() 对 getTotal() 的调用。你有无意的递归

编辑:好的,试试这个:(如果你的代码有一个jsfiddle会更容易)

$(document).ready(function ()
{
    var total = 0;
    $('.price').each(function()
    {
        total += parseFloat(this.innerHTML)
    });

    $('#total').text(total);
});
于 2012-11-16T00:17:04.953 回答
1

您的计算逻辑似乎有效

var total = 0;
$('.price').each(function(){
    total += parseFloat(this.innerHTML)
});

但问题是您在其内部调用“getTotal()”函数。

尝试

$(document).ready(function() {

var getTotal = function(){
  var total = 0;
  $('.price').each(function(){
      total += parseFloat(this.innerHTML);
  });
  return total;
}  

$('#total').text(getTotal());

});
于 2012-11-16T00:23:00.450 回答
0

尝试将您的 JS 放入<script defer="defer">标记中,这意味着它会最后运行 - 您的函数可能会在 Dom 完全完成之前尝试计算(尽管这可能仅适用于早期版本的 jQuery)

或者添加一个 setTimeout 以在几秒钟后调用您的小计函数。

您可能还想为您的函数添加一些警报,确保其尝试定位的字段正确定位。

Defer:<script defer="defer"> 究竟是如何工作的?

设置超时:https ://developer.mozilla.org/en-US/docs/DOM/window.setTimeout

于 2012-11-16T00:12:54.253 回答