2

自分で何かをしようとすると、複数の削除を行うことができず、単一の削除は機能しますが、複数の削除は機能しません。助けが必要です!

    // Flexigrid 
    if (com=='Delete')
            {

               if($('.trSelected').length>0){ 
                            if(confirm('Delete ' + $('.trSelected').length + ' rows?')){ 
                                var items = parseInt($('.trSelected').text(),10); 
                                    var itemlist =items; 
                                    for(i=0;i<items.length;i++){ 
                                          itemlist+= items[i].id.substr(3)+" "; //its contains no value for multiple delete
                                    }       
                                    $.ajax({
                   type: "POST",
                   dataType: "json",
                   url: "delete.php",
                   data: "items="+itemlist,
                   success: function(data){
                 alert("Query: "+data.query+" - Total affected rows: "+data.total);
                   $("#flex1").flexReload();
                   }
                 });
                }
                } else {
                    return false;
                } 
            }
4

1 に答える 1

0

これが問題です:

var items = parseInt($('.trSelected').text(),10); 
var itemlist =items; 
for(i=0;i<items.length;i++){ 
    itemlist+= items[i].id.substr(3)+" "; //its contains no value for multiple delete
} 

複数のアイテムがある場合は常にparseInt()、jQuery コレクションを呼び出すことはできません。これは、それをどう処理するかわからないためです。代わりに、選択を解析された.text()値のリストにマップできます。

$('.trSelected').map(function(index, item) {
    return parseInt($(item).text(), 10);
}

これにより、要素のグループが数値の配列に変わります。ただし、次の for ループの項目リストでは使用できません。したがって、代わりに、ロジックを単純化する必要があります。解析された int リストを返す代わりに、処理が必要な ID を返すだけです。例えば

$('.trSelected').map(function(index, item) {
    return item.id.substr(3);
}

アイテムを通常の DOM 要素として扱いたい場合はアイテムを使用しますが、.css() のような jQuery が必要な場合は、アイテムを $ でラップする必要があります。すなわち$(item)。または、 を使用$(this)して現在のアイテムを参照することもできます。これはおそらく高速です。

幸運を!

于 2012-10-23T01:53:34.630 に答える