2011-07-27 86 views
-1

出於某種原因,它只會刪除第一行,不知道爲什麼。不刪除其他行

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

} 
+1

什麼是oTable?標記在哪裏?你需要比1班輪和一些代碼更加冗長。 – madcapnmckay

+0

http://jsfiddle.net/xtremer360/3Ldj5/它應該執行它所做的服務器端操作,然後從表中刪除該行,但僅執行數組中的第一個操作。 –

+0

爲什麼我的文章被編輯? –

回答

2

避免。你可以得到意想不到的結果而是使用Array.foreach或jQuery的$.each()

$.each(aRow, function() { 
    oTable.fnDeleteRow(this); 
}); 

如果仍不能解決問題,請發佈更多細節,如oTable.fnDeleteRow()代碼。是否有任何JavaScript錯誤被拋出?

編輯:您的代碼正在將行索引傳遞給刪除函數。在調用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/

+0

我已經在jsfiddle中包含了它的副本。 http://jsfiddle.net/xtremer360/3Ldj5/ –

+0

@jeff - 我已經更新了我的答案。 – gilly3

1

我認爲你是選擇AROW指數incorreclt只是一個猜測 如果這樣做的目的(在你的「選中」循環)

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

是選擇行嘗試:

$(this).closest('tr') 

,並在阿賈克斯成功回調,而不是

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

嘗試使用數組for .. in

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