JQuery Получить общую цену товара из КАЖДОЙ ячейки и отобразить ее, работает, но не правильно

У меня есть этот javascript, функция jquery (ниже)

  1. Он получает текст внутри каждой ячейки таблицы (of class="total_item_price") таблицы.
  2. Он помещает его в массив (prices_array)
  3. Складывает Prices_array и форматирует их до 2 знаков после запятой.
  4. Затем выводит его в total_order_price или возвращает, если установлен do_request.

Проблема: у меня есть функция, которая удаляет товар из корзины, а затем вызывает эту функцию (getTotalPrice) для обновления поля цен. Эта часть работает неправильно и не дает правильную цену.

В принципе, мне нужна эта функция, чтобы:

  • Получите цену (цены) (.total_item_price), которая находится внутри ячейки.
  • Получите цену доставки (.shipping_price) + добавьте их все
  • Отобразите его внутри ячейки (.total_order_price)

Затем, когда я вызываю свою функцию удаления, я могу вызвать функцию ^this^, чтобы правильно обновить цену.
Я также вызываю эту функцию getTotalPrice в DOM. Готов обновить цены, поэтому важно, чтобы она работала правильно, она также должна работать, когда я вызываю свою функцию удаления (ниже).

У меня есть jsfiddle, но он не работает, но этот код работает на моем локальном хосте. Мне пришлось сжать его для jsfiddle, и он где-то сломался. Не стесняйтесь редактировать, как вы хотите.


Вот код(!): Эта функция получает общую стоимость и отображает ее.

function getTotalPrice(do_request)
{
var prices_array = new Array(); // Where our prices are held 

// For each .total_item_price - a <td> within my table.
$(".total_item_price").each(function(e){
    var text = $(this).text();                   // Get the value
    var prices = text.substring(1, text.length); // Format it into a string
    prices_array.push(prices);                   // Push it onto our array
});

var result = eval(0);
//  Add up our array
for(i = 0; i < prices_array.length; i++)
{
    temp = eval(prices_array[i]);
    result += temp;
}
// Round up our result to 2 Decimal Places
result = Math.round(result*100)/100;
// Output/Return our result
if (do_request == null)
{
    // We want to add our shipping Price and Display the total
    // Get the Shipping Price
    var shipping_price = $(".shipping_price").html();
    shipping_price = shipping_price.substring(1, shipping_price.length);

    // Add em
    result += eval(shipping_price);

    // Round our result to 2 decimal places
    var result=Math.round(result*100)/100;

    // Update & Display the Result
    $('.total_order_price').html("<b>£" + result + "</b>");        
}
else 
{
    // Otherwise we just want the total price and return it.
    return result;
}
}

Это функция, которую я сделал для удаления строки из таблицы и обновления цен.

// Delete Item from Basket, Run on click of delete button
function delete_item(e)
{
doIt = confirm('Delete Item from Basket?\r\n You can not undo this action.');
if(doIt)
{
  // Get our basket
  var basket_md5 = $(e).parent().find("input[name='basket_md5']").val();
  var url = "<?php echo SERVER_URL."shop/basket"; ?>";
  // Post to basket
  $.post(url, { "do": "delete_item","basket_md5": basket_md5});

  // Delete Row from Table
  // Row Scope
  var row = $(e).parent().parent();

  // Effect & Remove from DOM
  $(row).fadeOut(1000, function(){ 
      $(this).remove();

  });

  // Update the Prices (again)
  //tprice = getTotalPrice("return");
  //$('.total_order_price').html("<b>£" + tprice + "</b>"); 
  getTotalPrice();
 }
} 

person Community    schedule 08.08.2011    source источник


Ответы (1)


В function delete_item(e) переместите 'getTotalPrice(); здесь:

$(row).fadeOut(1000, function(){ 
      $(this).remove();
      // Update the Prices (again)
      //tprice = getTotalPrice("return");
     //$('.total_order_price').html("<b>£" + tprice + "</b>"); 
     getTotalPrice();
  });
person DefyGravity    schedule 08.08.2011
comment
Я думаю, что .fadeOut() не является блокирующей функцией. Это означает, что getTotalPrice вызывается для модели DOM, в которой все еще есть строка. - person DefyGravity; 08.08.2011