Проблема в том, что в итерации вы изменяете одну и ту же ссылку от до supplieritemdata
. Это означает, что, хотя вы добавили эту переменную в массив data
, установите ее на null
или измените ее свойства, это повлияет на экземпляр, хранящийся в массиве. Таким образом, вы перезаписываете свойства одного объекта на каждой итерации l oop. Вот почему отображаются только последние значения.
Чтобы исправить это, вам нужно создать новый объект в каждой итерации l oop.
Также обратите внимание, что logi c можно сделать более лаконичным, только выбрав tr
элементы, которые отмечены флажком (чтобы убрать необходимость в if
), и другие с помощью map()
. Попробуйте это:
var data = $('#tbl1 > tbody > tr:has(:checkbox:checked)').map(function() {
return {
SupplierId: $('#ddlsupplierdetails').val(),
ItemCategoryId: $('#ddlcategory').val(),
ItemGroupId: $('#ddlgroup').val(),
ItemId: $(this).find(".label-info").html()
}
}).get();
console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="ddlsupplierdetails" value="ddlsupplierdetails" />
<input type="text" id="ddlcategory" value="ddlcategory" />
<input type="text" id="ddlgroup" value="ddlgroup" />
<input type="text" id="ddlsupplierdetails" value="ddlsupplierdetails" />
<table id="tbl1">
<tbody>
<tr>
<td><input type="checkbox" class="check" checked="true" /></td>
<td><span class="label-info">Foo bar 1</span></td>
</tr>
<tr>
<td><input type="checkbox" class="check" /></td>
<td><span class="label-info">Foo bar 2</span></td>
</tr>
<tr>
<td><input type="checkbox" class="check" checked="true" /></td>
<td><span class="label-info">Foo bar 3</span></td>
</tr>
</tbody>
</table>