在JavaScript中从表中删除操作按钮时的奇怪行为
我有一个使用DataTables构建表的页面,每行都有一个操作按钮,用于将该行中的一些数据(一个ID,只是一个int)添加到列表中。为了防止用户多次单击每个操作按钮,我将其设置为在您第一次单击某行的按钮时将其删除。这非常有效,直到我意识到如果切换到表格的下一页,然后切换回第一页,按钮就会返回 为了解决这个问题,我编写了一些JS将每一行与我的数据列表进行比较,如果该行的数据已经在列表中,它会删除该行的操作按钮。每次使用DataTable的在JavaScript中从表中删除操作按钮时的奇怪行为,javascript,jquery,html,datatables,Javascript,Jquery,Html,Datatables,我有一个使用DataTables构建表的页面,每行都有一个操作按钮,用于将该行中的一些数据(一个ID,只是一个int)添加到列表中。为了防止用户多次单击每个操作按钮,我将其设置为在您第一次单击某行的按钮时将其删除。这非常有效,直到我意识到如果切换到表格的下一页,然后切换回第一页,按钮就会返回 为了解决这个问题,我编写了一些JS将每一行与我的数据列表进行比较,如果该行的数据已经在列表中,它会删除该行的操作按钮。每次使用DataTable的draw.dt函数重新加载表格时(例如,当您切换到表格的不同
draw.dt
函数重新加载表格时(例如,当您切换到表格的不同页面并再次返回时),都会发生这种情况
问题是,当我切换页面,JavaScript开始删除按钮时,出于某种原因,它会每隔一行跳过一行。例如,如果我单击(从而删除)前三行的操作按钮,切换页面并切换回,我的JS将删除第1、3和5行上的操作按钮,而不是第1、2和3行。它是如此的一致,它必须是某种简单的循环错误,由于我草率的JS技能,但我找不到它
代码如下:
$(document).on('draw.dt', function () {
var $allSerialNumbers = $('.box-electrode'); // This is a list of all the rows' action buttons / ID's
$('#electrodes li').each(function (i, li) { // This is the list of ID's I'm comparing to
var $id = $(li).data('id');
for(var index = 0; index < $allSerialNumbers.length; index++){
if($id == $allSerialNumbers.eq(index).attr('data-id')){ // For each item in my ID list, run through all the rows and see if any Action Button ID's match any on the list
$('.box-electrode').eq(index).remove(); // If they do match, remove that Action Button
}
}
})
});
$(document).on('draw.dt',function(){
var$allSerialNumbers=$('.box');//这是所有行的操作按钮/ID的列表
$('#li')。每个(函数(i,li){//这是我要比较的ID的列表
var$id=$(li).data('id');
对于(变量索引=0;索引<$AllSerialNumber.length;索引++){
如果($id==$allSerialNumbers.eq(index).attr('data-id')){//对于我的id列表中的每个项目,运行所有行,查看是否有任何操作按钮id与列表中的任何项匹配
$('.box电极').eq(index).remove();//如果它们匹配,请删除该操作按钮
}
}
})
});
我不是JQuery方面的专家,但您最后一行中的remove()
是否可以重新调整列表的大小,使以前位于索引1的元素现在位于索引0,从而在增加索引时跳过它 在for()的后面插入console.log($id+'='+$allSerialNumbers.eq(index).attr('data-id');
loop,看看日志上写的是什么。可能正是这个原因导致了这个问题。发布一个JFiddle,我可以更深入地查看这些信息。是的,这是很有可能的。我读到反向迭代循环可以解决这个问题,但当我尝试时,它不起作用。有没有其他简单的方法可以解决这个问题?怎么了rong当你尝试向后迭代时?同一个问题?是的,同一个问题..似乎没有什么不同。测试这是否是问题的一种方法是单击一些行,但跳过其他行。因此,例如,代替1,2,3,->1,3,5,你可以尝试1,2,4,看看结果是否为1,3,6。嗯..我只做了1,2,4,它只删除了1行D3。