我有一个动态更新的表(感谢那些上次发布/订阅查询的人),我想将每个更新行的数据存储到一个数组中,然后将其插入到mongodb集合中。我的表如下:
<template name="choral">
<div class="container" style="padding-top: 25px">
<div class="table-responsive">
<form id="orderForm">
<table id ="productList" class="table table-borderless table-dark">
<thead class="thead-light">
<tr>
<th>Title:</th>
<th>See the Music:</th>
<th>Hear the Music:</th>
<th>Format:</th>
<th>Price (per copy):</th>
<th>Quantity:</th>
</tr>
</thead>
<tbody>
{{#each pieces}}
<tr id="itemList">
<td id="name">{{name}}</td>
<td id="pdf">PDF</td>
<td id="audio">AUDIO</td>
<td id="format">FORMAT</td>
<td id="price">{{score}}</td>
<td id="qty"><input type ="number" name ="quantity"></td>
</tr>
{{/each}}
</tbody>
<tfoot>
<tr>
<td colspan="5"></td>
<td><button id ="#addItems" class="button" type ="submit">Add to Cart</button></td>
</tr>
</tfoot>
</table>
</form>
</div>
</div>
我想从表主体的每一行中提取数据,并将动态数据存储到数组中。像这样的东西:
Template.choral.events({
'click #addItems': function(e){
e.preventDefault();
var cartItem =[];
$('#itemList tr').each(function(){
var item = [];
var name = $('#name',this).val();
var price = $('#price',this).val();
var qty = $('#qty',this).val();
item.push({name, price, qty});
cartItem.push([item]);
});
console.log(cartItem)
}
});
我不知道当通过对助手的空格键调用填充表格时,或者甚至有效使用.each()时,这种想法是否可行。最终,这些查询的最终结果应为:
cartItems [{name1, price1, qty},{name2, price2, qty}]
答案 0 :(得分:2)
首先,不要在生成的HTML中产生相同的id
属性-这是无效的。改为使用class
,如下所示:
{{#each pieces}}
<tr class="itemList">
<td class="name">{{name}}</td>
...等等
第二,jQuery选择器$('#itemList tr')
没有选择任何内容,因为#itemList
不包含任何tr
后代,而是本身 em> 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
参数中的修复程序。