2011-07-27 5 views
-1

何らかの理由で、最初の行だけが削除され、その理由は不明です。他の行を削​​除しない

私はこの目的(あなたのループを「確認」で)

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

が行トライ選択するのであればあなただけの推測 をaRowインデックスをincorreclt選択していると思う

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

とあなたのAJAXの成功コールバックの代わりに

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

アレイ上for .. inを使用して

$(whatsThis).closest("tr").hide(); 
関連する問題