我有一个带文件名的kendo网格和复选框作为列。每行都有一个文件名和复选框。我想删除行,单击按钮检查这些行。
我在onclick函数中使用了以下代码。
$.each(grid.dataSource.view(), function () {
var currentDataItem = grid.dataItem(grid.select());
var dataRow = grid.dataSource.getByUid(currentDataItem.uid);
grid.dataSource.remove(dataRow);
});
但是,我得到一个javascript异常,如uid未定义。请帮我摆脱这个。
编辑:能够逐行删除。无法在单次删除中删除多行。 此外,当我在删除后再次使用kendo上传时,所有以前删除的文件都会一次性上传。
由于 Manikandan
答案 0 :(得分:2)
/Iterate through all the tr in grid
$.each(grid.find('tr'), function (item,index) {
//check if the tr has a checked checkbox, you can be more specific here if you have multiple checkboxes in tr.
if(item.children('input[type=checkbox].is(':chekced'))
{
grid.dataSource.remove(item);
}
});
我想分享的几件事情:
答案 1 :(得分:1)
三个问题:
如果您迭代grid.dataSource.view()
,您将只找到网格当前页面中的那些元素。如果要遍历表格的所有元素,可以使用grid.dataSource.data()
代替。
迭代您不需要select
一行,因为您已经拥有了函数中的信息。例如,如果你这样做:
$.each(grid.dataSource.view(), function(idx, elem) {
console.log("item with index " + idx + " is ", elem);
})
然后elem
是行idx
上的项目。
最后但并非最不重要的是,当您从头开始迭代数组时,您无法删除元素,因为您要删除两个连续元素,您将删除第一个元素,然后递增计数器以继续下一个元素但然后第二个实际上现在位于第一个位置,因此将被跳过。
示例:如果您有以下代码:
var array = [3, 2, 1, 5, 6, 4];
console.log("before", array);
$.each(array, function(idx, elem) {
if (elem >= 5) {
array.splice(idx, 1);
}
});
console.log("after", array);
它会显示:
before [3, 2, 1, 5, 6, 4]
after [3, 2, 1, 6, 4]
值6
的元素未被删除!!!
相反,你应该从最后开始:
var array = [3, 2, 1, 5, 6, 4];
console.log("before", array);
var len = array.length;
while (len--) {
if (array[len] >= 5) {
array.splice(len, 1);
}
}
console.log("after", array);
得到结果:
before [3, 2, 1, 5, 6, 4]
after [3, 2, 1, 4]
所以,你的代码应该是:
var array = grid.dataSource.data();
var len = array.length;
while (len--) {
if (...) { // the condition for checking if the item has the checkbox ticked
grid.dataSource.remove(array[len]);
}
}