JQuery Datatables: Tanımsız 'aDataSort' özelliği okunamıyor


100

Bu keman için yarattım ve gereksinimlerime göre iyi çalışıyor: Keman

Ancak, aynısını uygulamamda kullandığımda tarayıcı konsolunda , tanımsız 'aDataSort' özelliğini okuyamıyor yazan bir hata alıyorum

Uygulamamda, javascript aşağıdaki gibi bir şey okuyor: Denetleyici çıktısını kontrol ettim ... iyi çalışıyor ve konsolda da yazdırılıyor.

$(document).ready(function() {

    $.getJSON("three.htm", function(data) {
             // console.log("loadDataTable >>  "+JSON.stringify(data));
             })
             .fail(function( jqxhr, textStatus, error ) {
             var err = textStatus + ', ' + error;
             alert(err);
             console.log( "Request Failed: " + err);
             })
             .success(function(data){
                 loadDataTable(data);
             });

    function loadDataTable(data){
         $("#recentSubscribers").dataTable().fnDestroy();    
         var oTable = $('#recentSubscribers').dataTable({
             "aaData" : JSON.parse(data.subscribers),
             "processing": true,
            "bPaginate": false,
            "bFilter": false,
            "bSort": false,
            "bInfo": false,
            "aoColumnDefs": [{
            "sTitle": "Subscriber ID",
            "aTargets": [0]
        }, {
            "sTitle": "Install Location",
            "aTargets": [1]
        }, {
            "sTitle": "Subscriber Name",
            "aTargets": [2]
        }, {
            "aTargets": [0], 
            "mRender": function (data, type, full) {
                return '<a style="text-decoration:none;" href="#" class="abc">' + data + '</a>';
            }
        }],
            "aoColumns": [{
            "mData": "code"
        }, {
            "mData": "acctNum"
        }, {
            "mData": "name"
        }]
            });

    }       

})

Lütfen eklediğiniz kodun kemanla (değil) ve çalıştırdığınız kodla aynı olduğundan emin olun. Ayrıca keman içinde iki hedefiniz [0] var, kontrol edin: jsfiddle.net/gL0p0t42
Leandro

Gerçekte "aDataSort" çağıran kaynağı sağlamıyorsunuz.
Daniel

Html tablosunun kimliğini mi kastediyorsunuz? Ben hallettim. Bir hedefe sahip olmayı deneyeyim.
swateek


1
Aynı problemi yaşadım ve olmayan bir sütun numarasına göre sipariş verdiğimi buldum .. Sadece 3 kolum vardı ama beşinciden sipariş verdim.
Hos Mercury

Yanıtlar:


139

THEAD'inizin tabloda boş olmaması önemlidir. DataTable olarak, beklenen verilerin sütun sayısını belirtmeniz gerekir. Verilerinize göre,

<table id="datatable">
    <thead>
        <tr>
            <th>Subscriber ID</th>
            <th>Install Location</th>
            <th>Subscriber Name</th>
            <th>some data</th>
        </tr>
    </thead>
</table>

30
Çalışma zamanında sütunları ve söz konusu sütunların sayısını yapılandırmayı içeren bir gereksinimim varsa ne olur? Yukarıda belirtilen gereksinim için kodu nasıl uygulayabilirim?
CS Lewis

Bu, yazdırılmayan veri sorunumu çözmeme yardımcı oldu. Aynı zamanda yazdığım yerde datatable için bir problemim daha çözmeme yardımcı oldu "Sort":false, sonra kontrolörden gelen listeyi azalan sırada görüntüleyebildi Model.OrderByDescending(x=>x.Action==0).ThenBy(x=>x.Action).
Sorangwala Abbasali

2
içinde <thead>olmalıdır a <tr>, sonra <th>s
brahimm

Bu, standart bir DataTable için geçerlidir (ve sorunumu çözer). RE: @CSLewis: Statik tablolardan emin değilim, ancak çalışma zamanında bir ajax isteğiyle birlikte sütunları yapılandırıyorsanız, içinde herhangi bir şey olması gerekmez, <thead>ancak DataTable () başlatmanızdaki sütunları şu şekilde tanımlamanız gerekir: datatables .net / başvuru / seçenek / sütunlar.data
Harvey Dobson

65

Ayrıca şu sorun vardı, Bu dizi aralık dışındaydı:

order: [1, 'asc'],

1
Bu her zaman beni anlıyor. Dizi aralık dışındaysa, diziyi 0 olarak varsayılan yapmanın bir yolu var mı?
JGreasley

6
@JGreasley Bunu boş bir dizi olarak ayarlayabilirsiniz: order: []
hogarth45

2
Burada 5 ve benim 7'yi belirttiğim sütunlar maden ocağı! Teşekkürler
aiffin

1
Bir! Hafta! Tam bir hafta! Ve bu 7 günlük bir hafta! Ve ben 9'dan 5'e, daha çok 9'dan gece yarısına kadar çalışmadığımdan oldukça eminim ... Bunların hepsi kayboldu çünkü bu hatayı bilmiyordum !! Arrrrrrrrrrrgh !! ... O kadar çok zaman kaybedildi ki, çok utanıyorum, İnternette defalarca araştırdım ve olası tüm çözümleri denedim - hiçbiri bunu 'düzeltmeye' bile yaklaşamazdı. Ve sonra ... sadece şans eseri ve şimdiden umutsuzlukla ... Cevabına rastladım ve ta-da! Beş dakika içinde her şey düzeldi . Zengin olsaydım, sana 10 bin € 'luk bir çek gönderirdim - lol
Gwyneth Llewelyn

9

Benim için hata DataTables'ın kendisindeydi; DataTables 1.10.9'daki sıralama kodu, sınırları kontrol etmeyecektir; bu yüzden eğer gibi bir şey kullanırsan

order: [[1, 'asc']]

boş bir tablo ile, satır idx 1 yoktur -> bu istisna sağlar. Bu, tablonun verileri eşzamansız olarak getirilirken gerçekleşti. Başlangıçta, dataTable yükleme sayfasında veri olmadan başlatılır. Sonuç verileri alınır alınmaz daha sonra güncellenmelidir.

Çözümüm:

// add within function _fnStringToCss( s ) in datatables.js
// directly after this line
// srcCol = nestedSort[i][0];

if(srcCol >= aoColumns.length) {
    continue;
}

// this line follows:
// aDataSort = aoColumns[ srcCol ].aDataSort;

Bu konudaki detaylandırmanız için teşekkür ederiz; Yukarıdaki @ hogarth45 , sorunu / hatayı doğru bir şekilde tanımladı, ancak bunun neden aslında bir sorun olduğu konusunda çok net değildi . Size iki yıl sonra cevap veriyorum ... ve görünüşe göre bu düzeltilmedi, en azından bildiğim kadarıyla resmi belgelerde bahsedilmedi.
Gwyneth Llewelyn

8

Aynı problemle karşılaştım, aşağıdaki değişiklikler problemimi çözdü.

$(document).ready(function() {
     $('.datatable').dataTable( {
            bSort: false,
            aoColumns: [ { sWidth: "45%" }, { sWidth: "45%" }, { sWidth: "10%", bSearchable: false, bSortable: false } ],
        "scrollY":        "200px",
        "scrollCollapse": true,
        "info":           true,
        "paging":         true
    } );
} );

aoColumnsdizisi, her sütun ve genişliğini tarif sortableözellikleri.

Bu hatadan bahsetmek için başka bir şey, var olmayan bir sütun numarasına göre sipariş verdiğinizde de görünecektir.


4

Benim durumumda

$(`#my_table`).empty();

Nerede olmalıydı

$(`#my_table tbody`).empty();

Not: Benim durumumda, yeni verileri eklemeden önce gitmesini istediğim verilerim olduğu için tabloyu boşaltmak zorunda kaldım.

Gelecekte birine "yardımcı olabileceği" yerleri paylaşmayı düşündüm!


1

Bu sorunu yaşadım ve bunun nedeni başka bir komut dosyasının tüm tabloları silip yeniden oluşturmasıydı, ancak masam yeniden oluşturulmuyordu. Masamın sayfada görünmediğini bile fark etmeden önce bu konuda yaşlarım vardı. DataTables'ı başlatmadan önce tablonuzu görebiliyor musunuz?

Esasen, diğer komut dosyası şunları yapıyordu:

let tables = $("table");
for (let i = 0; i < tables.length; i++) {
  const table = tables[i];
  if ($.fn.DataTable.isDataTable(table)) {
    $(table).DataTable().destroy(remove);
    $(table).empty();
  }
}

Ve yapması gerekirdi:

let tables = $("table.some-class-only");
... the rest ...

1

Ayrıştırma nedeniyle tek tırnak işaretlerini [']çift ​​tırnak işaretine ["]çevirmeniz gerekiyor

Eğer kullanıyorsanız veri sipariş masaya niteliğini sonra bu gibi kullanmakdata-order='[[1, "asc"]]'


OP'nin sorusuyla alakalı değil ama benim durumumda çalışıyor (html 5 veri özniteliklerini kullanarak)
blackbiron

1

Benim durumumda order, veri tablosunu yapılandırdığınız kodun içindeki özelliği uygularken geçerli bir sütun numarası oluşturarak sorunu çözdüm.

var table = $('#mytable').DataTable({
     .
     .
     .
     order: [[ 1, "desc" ]],

Temelde aynı şeyi söyleyen başka cevaplar da var. Lütfen eski sorulara gereksiz cevaplardan kaçınmaya çalışın.
thelr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.