2014-04-21 3 views
0

У меня есть кнопка, из которой пустоты tr в таблице. Каждый раз, когда он делает это, общее значение получается снова с использованием функции mainTotalCalc().JQuery ошибка каждого результата подсчета

Общее количество разработано с использованием .each и классов.

Проблема возникает, когда я добираюсь до последней оставшейся строки. Общая сумма останется как последняя сумма. Он никогда не достигает 0,00

Теперь я думаю, я могу понять, почему, поскольку JQ каждый считает последнее значение в переменной.

Я застрял на том, как сделать последнюю оставшуюся строку аннулированной, пока сумма вычисляется правильно.

The Fiddle (Но parseFloat, кажется, не работает здесь)

The JS/JQ

function mainTotalCalc() { 
    var activetableID = $("li.till_table_button.active").attr('id'); 
    // alert(activetableID); 
    var tablenumber = $("#"+activetableID).data("tableref"); 
    // alert(tablenumber); //testing 

    var newtotal=0,total=0; 

    $('.till__tablepanel_table_'+tablenumber+'_row__totalprice').each(function(i) { 
     var number = $(this).text(); 
     //alert(content); 
     //num = parseInt(number); 
     num = parseFloat(number); 
     newtotal += num; 
     // alert(number); //testing 

     totalpriceDecimal = newtotal.toFixed(2); 
     $('#till__totalpanel_table_'+tablenumber+'_price').html(newtotal.toFixed(2)); 
     // alert(totalpriceDecimal); 
     i++; 

    }); 

} 

позапрошлом Пустоты before void

После последнего Пустоты (Всего Останки как 1.00 и не должно быть) after void

+0

Что вызывает 'mainTotalCalc()' уволят? –

+0

его последняя вещь, вызываемая функцией, которая инициирует удаление 'tr: last'. Удаление выполняется отлично, и добавление строк вычисляется отлично. Его просто, когда их аннулируют, последний имеет проблему. Я думаю, что это что-то связано с + =, но я не уверен. – Derple

ответ

1

Настройка состояния охраны, если нет больше строк:

if ($('.till__tablepanel_table_0_row__totalprice').length == 0) 
    $('#till__totalpanel_table_0_price').html('0.00'); 

DEMO

+0

это именно то, что я искал, большое спасибо. Я пробовал так много способов, но не это. Потрясающие! – Derple

+1

Хотя это решает этот симптом, он на самом деле не идентифицирует * проблему * .... –

+0

Я вижу проблему сейчас, поскольку не было никаких строк для расчета. Это прекрасно решает проблему. Я просто не понимал, что никакие строки не предполагали вычисления раньше. – Derple

0

Проблема с кодом является то, что общее обновляется внутри.each петли.

Если теперь есть целые строки, это не будет работать.

Измените функцию следующим образом:

function mainTotalCalc() { 
    $('.till__tablepanel_table_'+tablenumber+'_row__totalprice').each(function(i) { 
     var number = $(this).text(); 
     //alert(content); 
     //num = parseInt(number); 
     num = parseFloat(number); 
     newtotal += num; 
     // alert(number); //testing 

     totalpriceDecimal = newtotal.toFixed(2); 
     // alert(totalpriceDecimal); 
     i++; 

    }); 
    // Move this line outside of the .each loop 
    $('#till__totalpanel_table_'+tablenumber+'_price').html(newtotal.toFixed(2)); 
} 
+0

Я пробовал это и понял теперь ошибку. Фактических строк не существует для вычисления общей суммы. Вот почему этот подход не сработал. Спасибо хоть – Derple

0

Вы пропустили newtotal объявление переменной, просто сделать это:

function mainTotalCalc() { 
    var newtotal = 0.0; // MISSED VARIABLE DECLARATION 
    $('.till__tablepanel_table_0_row__totalprice').each(function() {   
     var number = $(this).text(); 
     console.log('number: ' + number); 

     newtotal += parseFloat(number);   
     console.log('newtotal= ' + newtotal); 

     totalpriceDecimal = newtotal.toFixed(2); 
     $('#till__totalpanel_table_0_price').html(totalpriceDecimal); 
     // alert(totalpriceDecimal); 

    }); 
} 
Смежные вопросы