Проблема, как уже отмечали другие, заключается в том, что вы делите на ноль, когда сумма и количество строк равны нулю.
Однако вы должны заметить, что ваше решение намного сложнее, чем нужно, и разделение, вызывающее проблему, является полностью избыточным.
Логика может быть DRY-создана и сделана намного более расширяемой, удалив уникальные атрибуты id
(что устраняет необходимость в цикле / массиве и операторе по модулю), а также используя общие классы на всехваши элементы.Попробуйте это:
window.addEventListener('load', function() {
$('.change-quantity').click(function() {
var amount = $(this).data('amount');
var $quantity = $(this).siblings('.quantity').val(function(i, v) {
v = +v || 0;
return Math.max(0, v < 99 && v >= 0 ? v + amount : v);
});
updateRowTotal($quantity.closest('tr'));
updateOverallTotal();
});
function updateRowTotal($row) {
$row.find('.result').text(function() {
return ((+$row.find('input.quantity').val() || 0) * (+$row.find('input.price').val() || 0)).toFixed(2) + '€';
});
}
function updateOverallTotal() {
var total = 0;
$('.result').each(function() {
total += parseFloat($(this).text()) || 0;
});
$('#total').text(total.toFixed(2) + '€');
}
});
<script data-require="jquery@3.1.1" data-semver="3.1.1" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="style.css" />
<div id="total">0.00€</div>
<div class="main">
<table>
<tr>
<td align="center">Description</td>
<td align="center">Price</td>
<td align="center">Quantity</td>
</tr>
<tr>
<td>Article 1</td>
<td><input type="text" hidden="true" value="2.5" class="price">2.50€</td>
<td>
<div class="quantity buttons_added">
<button type="button" class="change-quantity" data-amount="-1">-</button>
<input type="number" class="quantity" value="0" min="0" max="3" />
<button type="button" class="change-quantity" data-amount="1">+</button>
</div>
</td>
<td>
<div class="result"></div>
</td>
</tr>
<tr>
<td>Article 2</td>
<td><input type="text" hidden="true" value="1" class="price">1.00€</td>
<td>
<div class="quantity buttons_added">
<button type="button" class="change-quantity" data-amount="-1">-</button>
<input type="number" class="quantity" value="0" min="0" max="3" />
<button type="button" class="change-quantity" data-amount="1">+</button>
</div>
</td>
<td>
<div class="result"></div>
</td>
</tr>
<tr>
<td>Article 3</td>
<td><input type="text" hidden="true" value="3.8" class="price">3.80€</td>
<td>
<div class="quantity buttons_added">
<button type="button" class="change-quantity" data-amount="-1">-</button>
<input type="number" class="quantity" value="0" min="0" max="3" />
<button type="button" class="change-quantity" data-amount="1">+</button>
</div>
</td>
<td>
<div class="result"></div>
</td>
</tr>
<tr>
<td>Article 4</td>
<td><input type="text" hidden="true" value="1" class="price">1.00€</td>
<td>
<div class="quantity buttons_added">
<button type="button" class="change-quantity" data-amount="-1">-</button>
<input type="number" class="quantity" value="0" min="0" max="3" />
<button type="button" class="change-quantity" data-amount="1">+</button>
</div>
</td>
<td>
<div class="result"></div>
</td>
</tr>
</table>
</div>