2016-03-22 23 views
0

Bu gibi benim jquery bir datatable inşa çalışmaz:jQuery DataTable birden filtrering

var ticketDataTable = $("#ticketDataTable").DataTable({ 
     serverSide: true, 
     ajax: { 
      url: ajaxUrl, 
      type: "POST", 
      data: function(data) { 
       data.ticketStatusFilter = ketStatusCheckboxes.filter(':checked') 
        .map(function() { return this.value; }).get() 
        .join(';') 
      } 
     }, 
     columns: [ 
      { 
       name: "ticket.ticketNumber", 
       data: "0.ticketNumber" 
      }, 
      { }, 
      { }, 
      { }, 
      { }, 
      { }, 
      { }, 
      { }, 
      { }, 
      { }, 
      { },   
      { }, 
      { }, 
      { }, 
      { }, 
      { } 
     ], 
     bSortCellsTop: true, 
     dom: 'rt<lp>', 
     order: [[2, "desc"]] // Sort by descending date 
    }); 

Tüm sütunlar aynı şekilde inşa edilir. Ardından, çoklu filtre yapmak için onay kutularını içeren bir açılır liste oluşturmak için sumoSelect eklentisini kullanıyorum.

$("table#ticketDataTable thead tr th#multiSelectFilter").find("select").SumoSelect({ selectAll: true }); 

İyi çalışıyor. Daha sonra, giriş değişimi (i seçimler kontrol ederken), ne zaman bunu yapmak:

var arr = $("table#ticketDataTable thead tr th#multiSelectFilter").find("select")[0].sumo.getSelStr(); 

Böyle bir sonuç almak: "FIRST|SECOND|THIRD" veya "SECOND" veya "FIRST|SECOND".

ticketDataTable.column(5).search(arr,true,true).draw(); 

Ancak, yalnızca bir seçenekle çalışır. Birden fazla varsa ("İLK | İKİNCİ" gibi), işe yaramıyor.

+0

Özel filtreler oluşturmanız ve buna göre filtrelemek için kullanmanız gerekir. Bu https://datatables.net/examples/plug-ins/range_filtering.html adresine bakın, daha fazla yardıma ihtiyacınız varsa bildirin ( –

+0

Evet, ancak sayı sütununda filtrelemek istemiyorum ancak metin/dizgi sütununda. – DyM

+0

sadece bir örnektir. Mantığınızı buna göre değiştirmelisiniz. Ayrıca bu fonksiyon her satır için de çalışacaktır, bu yüzden geri dönüşü bu satırın görünür geri dönüşünün yanlış olacağını kaldıracaktır. Eğer sütun değerinin bu ya da böyle olması durumunda bir mantık yazmanız gerekir. Bu .. birden fazla seçim dayalı ve daha sonra –

cevap

0

diyoruz tabloya filtre etmek istiyorum. Ajax isteğime yeni veriler ekledim. İsteğimi yapmak için sunucu tarafımda kullanıyorum. Ardından, filtremdeki her tıklamayı değiştirdim ve isteği yeniden başlatıyorum.

İyi Çalışır!

0

Çözüm, özel bir süzgeç eklemek ve sonra gerekli verileri süzmek için tablo draw() işlevini çağırmak olacaktır. Mantığı bu özel filtrenin içine yerleştireceksiniz.

Görebildiğim kadarıyla bir çoklu seçiminiz var ve sütun 5'in çoklu seçimden değerlere sahip olduğu tüm satırları seçmek istiyorsunuz. İşte kısa bir fikir. Gördüğünüz gibi

$.fn.dataTable.ext.search.push(
    function (settings, data, dataIndex) { 
     if (settings.nTable.id === "ticketDataTable") { // apply this fiter only to your ticketDataTable table. 
      return CheckIfRowIsValid(data[5]); // data[5] will give you current row column idex 5's value. 
     } 
     else { //filter function not applicable to other datatables other than ticketDataTable so do nothing. 
      return true; 
     } 
    } 
    ); 

    function CheckIfRowIsValid(value) { 
     var multiSelectArray = []; // get all the values from multi select. 

     if ($.inArray(value, multiSelectArray) < 0) { 
      return false;   //if value is not found in array return false as you dont have to show the row. 
     } 
     else { 
      return true;   //return true to keep the row visible. 
     } 
    } 

Yani, özel mantık her satır için ve sadece dönüş true veya saklamak veya satırları kaldırmak sahte söyleyerek bir kez tetiklenir. This example just concentrates on single column with multiple possible values. Birden çok sütun üzerinde çalışmak için genişletebilirsiniz. Sadece her sütun için başka bir şey ekleyerek.

Şimdi her sadece bunu çözmek için bir yol bulmak ticketDataTable.draw()

+0

ticketDataTable.context [0] .bAjaxDataGet = false; işe yaramadı, hiçbir şey olmadı – DyM

+0

@DyM Yalnızca bir kez veri alıyorsanız ve daha sonra yalnızca bu verilere göre sıralama, filtreleme ve bir şeyler yapmak istiyorsanız, ajax tarafından her zaman sunucudan veri alabilir ve bazı değişkenlerde saklayabilirsiniz. bu değişken veriyi datatables'e. Dolayısıyla, veri kümeleriniz yerel veri kullanmalı ve sunucu verilerini kullanmamalıdır. –

+0

bunu nasıl yapabilirim? – DyM

İlgili konular