Прежде всего, не создавайте идентичные id
свойства в сгенерированном HTML - это недопустимо. Вместо этого используйте class
, например:
{{#each pieces}}
<tr class="itemList">
<td class="name">{{name}}</td>
... и т. Д.
Во-вторых, селектор jQuery $('#itemList tr')
ничего не выбирает, потому что #itemList
не содержит никаких tr
потомков, а вместо этого сам a tr
. Таким образом, вместе с предыдущим замечанием селектор должен быть $('tr.itemList')
.
Затем в своем коде jQuery выберите по атрибуту класса (используя .
) и сделайте это в контексте this
, чтобы соответствовать только в текущей строке:
var cartItem =[];
$('tr.itemList').each(function() {
var name = $('.name', this).val();
var price = +$('.price', this).val(); // convert to number?
var qty = +$('.qty', this).val(); // (idem)
var item = {name, price, qty}; // just assign to item
cartItem.push(item); // don't use square brackets here
});
Возможно, вы захотите, чтобы цена и количество были преобразованы в числа. В этом случае используйте одинарный +
(см. Выше).
Не думаю, что вы хотите, чтобы item
был массивом, а просто объект с тремя свойствами.
Обратите внимание также на исправление в аргументе push
.