不删除其他行

时间:2011-07-27 23:16:03

标签: javascript jquery

出于某种原因,它只删除第一行而不确定原因。

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();
                }
            } 
        }
    });

}

2 个答案:

答案 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]);
}); 

http://jsfiddle.net/3Ldj5/2/

答案 1 :(得分:1)

我认为你选择aRow index incorreclt只是一个猜测 如果这个目的(在你的“检查”循环中)

$(this).parents('tr').get(0)

是选择一行试试:

$(this).closest('tr')

并在你的ajax成功回调

 $(whatsThis).parents("tr").eq(0).hide(); 

 $(whatsThis).closest("tr").hide();