我有一个数据表,其中的复选框对应于每一行。理想情况下,当您单击复选框时,它会将该行的内容附加到“收藏夹列表”中。但是正在发生的事情是,我单击的任何复选框都是列表中唯一显示的复选框。
我得到为什么仅显示第一项(favesArr[0]
),但是我想知道的是how to get the List to show all of the items that are selected.
我在这个问题中没有HTML文件,所以如果您想看到它,请告诉我。
import JSONfile from '../../../public/JSONfile.json';
loadTableData() {
$.noConflict();
let tableRes = JSONfile.d.results.filter(function(val) {
return (val.FileLeafRef.trim().length > 0);
}).map(function(obj) {
return {
"Path": obj.EncodedAbsUrl,
"Titles": obj.File.Name,
"Categories": obj.ResourceType.results.map(function(val) {
return val.Label;
}).join(";"),
// "Blank": ''
}
});
$('#km-table-id').DataTable( {
columns: [
{ data: "Titles" }, // populates col-2 column with docs
{ data: "Categories" } // hidden col-3 categories
],
columnDefs: [
{
data: "Path",
render: function(data, type, row) {
return $('<a>')
.attr({target: "_blank", href: row.Path})
.text(data)
.wrap('<div></div>')
.parent()
.html();
},
targets: 0
},
{ searchable: true, targets: [1], visible: false },
],
data: tableRes,
language: { searchPlaceholder: "Search All Documents" },
responsive: true,
scrollCollapse: true,
scrollX: true,
scrollY: 600,
select: {
selector: "td:first-child",
style: "os"
},
stateSave: true
});
($("#km-table-id tbody tr")).append($("<input />", {"type": "checkbox"}).addClass("checkbox-class"));
const $table = $("#km-table-id")
let table = $table.DataTable();
let favesArr = [];
$table.on("click", ".checkbox-class", function(e) {
let data = table.row(this.parentNode).data(),
checked = $(this).is(":checked"),
dataIndex = favesArr.indexOf(data);
if (checked) {
if (dataIndex === -1) {
favesArr.push(data); // add item
}
} else {
if (dataIndex > -1) {
favesArr.splice(dataIndex, 1); // remove item
}
}
// let arrOfTitles = favesArr;
// let uniqueTitles = [];
// $.each(arrOfTitles, function(e, el) {
// if ($.inArray(el, uniqueTitles) === -1) uniqueTitles.push(el);
// });
$(".populate-faves").append(JSON.stringify(favesArr[0].Titles) + '<br/>'); /////// This is the line that's bugging me
console.log(favesArr); ///// does show whichever document (obj) is selected
});
} // ------------------ loadTableData
答案 0 :(得分:0)
为了使favesArr
中的每个条目仅占一行,您可以先删除所有先前的条目($(".populate-faves").empty();
),然后为每个收藏夹添加一个条目,如下所示:
for (var i=0;i<favesArr.length;i++) {
$(".populate-faves").append(JSON.stringify(favesArr[i].Titles) + '<br/>');
}
当然,有很多方法可以解决此问题,但是我认为这将是您现在所能想到的最直观的方法。