@vadikkkxgavrilenko

Почему некорректно работает калькулятор динамической таблицы?

Делаю динамическую таблицу для универа.
Последнюю функцию не могу заставить работать. Не считает сумму столбца.
Пишет NaN.

<div class="container">
	<p style="display: inline;">Продукты:</p>
	<select name="" id="lstProducts">
		<optgroup label="Овощи">
			<option value="100">Картошка</option>
			<option value="200">Морковь</option>
			<option value="300">Лук</option>
		</optgroup>
		<optgroup label="Фрукты">
			<option value="400">Яблоки</option>
			<option value="500">Бананы</option>
		</optgroup>
		<optgroup label="Напитки">
			<option value="600">Чай</option>
			<option value="700">Кофе</option>
		</optgroup>
	</select>
	<p style="display: inline;">Количество:</p>
	<input id="txtQty" type="text">
	<input value="Добавить в корзину" onclick="AddToCart()" class="bb" type="button">
</div>

<table id="tblOrder">
	
	<thead>
		<tr>
			<th>
				<caption>Ваш заказ</caption>
			</th>
			
		</tr>
		<tr>
			<th>
				<input type="checkbox" onclick="ToggleCheck(this)" />
			</th>
			<th>
				Продукт
			</th>
			<th>
				Цена
			</th>
			<th>
				Количество
			</th>
			<th>
				Сумма
			</th>
			<th>
				
			</th>
		</tr>
		
	</thead>	
	<tbody >		
			
		
	</tbody>
	<tfoot id="tf">

		<tr>
			<th>
				
			</th>
			<th>
				Итого
			</th>
			<th>
				
			</th>
			<th>
				<span id="kol">0</span>
			</th>
			<th>
				<span id="sum">0.00</span>
			</th>
			<th>
				<input type="button" value="Удалить отмеченные" onclick="RemoveSelected()"/>
			</th>
		</tr>
		
	</tfoot>
</table>
<script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>
<script language="JavaScript">
	var tbl = document.getElementById('tblOrder');
	var oList = document.getElementById('lstProducts');
	var txt = document.getElementById('txtQty');
	var tf = document.getElementById('tf');
	var kol = document.getElementById('kol');
	var sum = document.getElementById('sum');
	



	/* Добавление пунктов заказа */
	function AddToCart() {
	/* Определяем значение, введѐнное в текстовое поле */
	var qty = document.getElementById('txtQty').value;
	/* Проверка: распознаѐтся ли значение как число? Если нет, считаем
	единицей */
	if (parseFloat(qty) != qty)
	qty = 1;
	/* Вставляем строку в тело таблицы */
	var oRow = tbl.tBodies[0].insertRow(-1);
	/* В добавленную строку вставляем, во-первых, checkbox */
	oRow.insertCell(-1).innerHTML = '<input type="checkbox">';
	/* во-вторых, текст, взятый из списка выбора продуктов */
	oRow.insertCell(-1).innerHTML =
	oList.options[oList.selectedIndex].text;
	/* в-третьих, цена выбранного продукта */
	oRow.insertCell(-1).innerHTML = oList.value;
	/* далее, количество, указанное в текстовом поле */
	oRow.insertCell(-1).innerHTML = txt.value;
	/* затем стоимость пункта заказа*/
	oRow.insertCell(-1).innerHTML = txt.value * oList.value;
	/* и, наконец, кнопку "Удалить" */
	oRow.insertCell(-1).innerHTML = '<input type="button" value="Удалить">';

	
	Calculate();

	}
	function Calculate() {
	  /* Счётчики для количества единиц товара и общей стоимости */
	  var qty = 0, amount = 0;
	  /* Цикл по всем строкам в теле таблицы */
	  for (var i = 0, n = tbl.tBodies[0].rows.length; i < n; i++) {
	    /* Увеличиваем qty на значение в 3 столбце текущей строки */
	    qty += parseFloat(tbl.tBodies[0].rows[i].cells[3].innerHTML);
	   
	    /* Увеличиваем amount на значение в 4 столбце текущей строки */
	    amount += parseFloat(tbl.tBodies[0].rows[i].cells[4].innerHTML);
	  }
	   kol.innerHTML = qty;
	   sum.innerHTML = amount;

	  /* Записываем qty в 3 столбец нижнего колонтитула */
	  
	  /* Записываем amount в 4 столбец нижнего колонтитула */
	  
	}
</script>
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Невалидный html, который браузер пытается поправить, в результате строка с заголовками столбцов оказывается в tbody, и текст в заголовках обрабатывается при вычислении суммы как часть данных - отсюда NaN.

Тэг caption должен быть первым вложенным элементом тэга table, внутри th ему не место.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы