出于某种原因,它只删除第一行而不确定原因。
function templatesArray(whatsThis) {
var myNewArray = new Array();
var aRow = new Array();
$('input:checkbox[name="templates"]:checked').each(function(i) {
myNewArray.push($(this).val());
aRow.push(oTable.fnGetPosition( $(this).parents('tr').get(0)));
});
var dataString = 'templatesArray=' + myNewArray + '&deleteTemplatesArray=True';
$.ajax({
type: "POST",
url: "processes/templates.php",
data: dataString,
success: function(data) {
if (data.errorsExist) {
} else {
$(whatsThis).parents("tr").eq(0).hide();
for (i in aRow) // loop over the array of row indexes
oTable.fnDeleteRow(aRow[i]);
if(oTable.fnSettings().fnRecordsTotal() == 0) {
$('.bt_red').remove();
$('.bt_blue').remove();
}
if(oTable.fnSettings().fnRecordsTotal() <= 10) {
$('.bt_blue').remove();
}
if(oTable.fnSettings().fnRecordsTotal() <= 10) {
$('div.pagination').remove();
}
}
}
});
}
答案 0 :(得分:2)
避免在数组上使用for .. in
。你可以得到意想不到的结果而是使用Array.foreach
或jQuery的$.each()
:
$.each(aRow, function() {
oTable.fnDeleteRow(this);
});
如果不能解决问题,请发布更多详细信息,例如oTable.fnDeleteRow()
的代码。是否会抛出任何JavaScript错误?
编辑:您的代码将行索引传递给delete函数。调用delete函数后,所有进行的行都有一个新的行索引。因此,如果您尝试删除行1,2和3,最终将删除行1,3和5.而是存储并传递对行本身的引用:
$('input:checkbox[name="templates"]:checked').each(function(i) {
myNewArray.push($(this).val());
aRow.push($(this).closest('tr')[0]);
});
答案 1 :(得分:1)
我认为你选择aRow index incorreclt只是一个猜测 如果这个目的(在你的“检查”循环中)
$(this).parents('tr').get(0)
是选择一行试试:
$(this).closest('tr')
并在你的ajax成功回调
$(whatsThis).parents("tr").eq(0).hide();
试
$(whatsThis).closest("tr").hide();