Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中从表中删除操作按钮时的奇怪行为_Javascript_Jquery_Html_Datatables - Fatal编程技术网

在JavaScript中从表中删除操作按钮时的奇怪行为

在JavaScript中从表中删除操作按钮时的奇怪行为,javascript,jquery,html,datatables,Javascript,Jquery,Html,Datatables,我有一个使用DataTables构建表的页面,每行都有一个操作按钮,用于将该行中的一些数据(一个ID,只是一个int)添加到列表中。为了防止用户多次单击每个操作按钮,我将其设置为在您第一次单击某行的按钮时将其删除。这非常有效,直到我意识到如果切换到表格的下一页,然后切换回第一页,按钮就会返回 为了解决这个问题,我编写了一些JS将每一行与我的数据列表进行比较,如果该行的数据已经在列表中,它会删除该行的操作按钮。每次使用DataTable的draw.dt函数重新加载表格时(例如,当您切换到表格的不同

我有一个使用DataTables构建表的页面,每行都有一个操作按钮,用于将该行中的一些数据(一个ID,只是一个int)添加到列表中。为了防止用户多次单击每个操作按钮,我将其设置为在您第一次单击某行的按钮时将其删除。这非常有效,直到我意识到如果切换到表格的下一页,然后切换回第一页,按钮就会返回

为了解决这个问题,我编写了一些JS将每一行与我的数据列表进行比较,如果该行的数据已经在列表中,它会删除该行的操作按钮。每次使用DataTable的
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。