2016-02-26 3 views
-1

Привет У меня есть проблема с ниже код JavaScript не принимает текущее значение GrossTotal(), пока я не перепишем Количество или UnitPrice значенияJavaScript/JQuery Расчеты выпуска

$(document).ready(function() { 
    $("[id*=gridpur]input[type=text][id*=txtCalc]").on('keyup', (function (e) { 
    var unitprice = $(this).closest('tr').find("input[type=text][id*=txtCalcUnitprice]").val(); 
    var quantity = $(e.target).closest('tr').find("input[type=text][id*=txtCalcQuantity]").val(); 
    var total = unitprice * quantity; 
    var cost = (total/GrossTotal())*100; 
    $(e.target).closest('tr').find("[id*=lblTotal]").text(total); 
    $(e.target).closest('tr').find("[id*=lblcost]").text(cost); 
    })); 
}); 

var gross; 
function GrossTotal() { 
    gross = 0; 
    $("[id*=gridpur][id*=lblTotal]").each(function (index, item) { 
    gross = gross + parseInt($(item).text()); 
    }); 
    $("[id*=lblGrandTotal]").text(gross); 
    return gross; 
} 

, например, если ввели следующие значения выходной я получаю что не соответствует

ProductName UnitPrice Quantity Amount Cost % 
product1  9   1   9  Infinity 
product2  9   1   9  100 
product3  9   1   9  50 

Я только получить правильные значения после перезаписи Количество или UnitPrice которое

ProductName UnitPrice Quantity Amount Cost % 
product1  9   1   9  33.3 
product2  9   1   9  33.3 
product3  9   1   9  33.3 
+0

Вы получаете 'Infinity', когда вы делите на ноль. Проблема в том, что вы заполняете 'lblTotal' после вызова' GrossTotal() ', но' GrossTotal() 'должен использовать' lblTotal'. – Barmar

ответ

0

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

unitprice = !isNaN(unitprice) ? 0 : unitprice; 
quantity = !isNaN(quantity) ? 0 : quantity; 

var total = unitprice * quantity; 
var grossTotal = GrossTotal(), 
    cost = 0; 

if(grossTotal > 0) { 
    cost = (total/grossTotal) *100; 
} 

Кроме того, это лучше, привычка использовать десятичную при использовании parseInt

parseInt($(item).text(), 10) 
+1

спасибо, но я все еще не получаю текущее значение GrossTotal() – Ayman

0

Проблема заключается в том, что GrossTotal() складывает значения во всех lblTotal полях, но вы 'не заполняя их до после, вы это называете. Измените эти строки:

var cost = (total/GrossTotal())*100; 
$(e.target).closest('tr').find("[id*=lblTotal]").text(total); 
$(e.target).closest('tr').find("[id*=lblcost]").text(cost); 

к:

$(e.target).closest('tr').find("[id*=lblTotal]").text(total); 
var cost = (total/GrossTotal())*100; 
$(e.target).closest('tr').find("[id*=lblcost]").text(cost); 
+0

, поэтому я добавлю этот код в функцию GrossTotal()? – Ayman

+0

Нет, он заменяет эти строки в обработчике 'keyup'. – Barmar

+0

У меня еще проблема: – Ayman