jQuery Datatables:未定義のプロパティ 'aDataSort'を読み取れません


96

私はこのフィドルを作成し、それは私の要件に従ってうまく機能します:フィドル

ただし、アプリケーションで同じものを使用すると、ブラウザコンソールに、未定義のプロパティ 'aDataSort'を読み取れませんというエラーが表示されます。

私のアプリケーションでは、javascriptは次のようになります。私はコントローラーの出力を確認しました...それはうまく機能し、コンソールにも出力されます。

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

    }       

})

含めたコードがフィドル(そうではない)と同じであり、実行しているコードと同じであることを確認してください。また、フィドルには2つのaTargets [0]があります。jsfiddle.net
Leandro Carracedo、

「aDataSort」を実際に呼び出すソースを提供していません。
ダニエル

HTMLテーブルのIDを意味しますか?私はそれを大事にしました。ターゲットを1つにしてみます。
swateek 2015

@Danielソースは、loadDataTable()関数のパラメーターです。
swateek 2015

回答:


131

THEADがテーブル内で空でないことが重要です。dataTableでは、予想されるデータの列数を指定する必要があります。あなたのデータによると、それは

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

26
実行時に列の構成と列の数を含む要件がある場合はどうなりますか?前述の要件のコードを実装するにはどうすればよいですか?
CSルイス

これは、印刷されないデータの問題を解決するのに役立ちました。まあそれは私が書いたdatatableの私のもう1つの問題を解決するのにも役立ち"Sort":false、それからコントローラーから来た降順でリストを表示することができましたModel.OrderByDescending(x=>x.Action==0).ThenBy(x=>x.Action)
Sorangwala Abbasali 2016

2
には、次にs <thead>が含まれている必要があります<tr><th>
brahimm

これは標準のDataTableにも当てはまります(そして私の問題を解決します)。RE:@CSLewis:静的テーブルではわかりませんが、実行時にajaxリクエストと一緒に列を構成する場合は、何も含める<thead>必要はありませんが、次のようにDataTable()開始で列を定義する必要があります:datatables .net / reference / option / columns.data
Harvey Dobson

61

この問題もあり、この配列は範囲外でした:

order: [1, 'asc'],

1
これはいつも私を捕まえます。配列が範囲外の場合、配列のデフォルトを0にする方法はありますか?
JGreasley 2017

6
@JGreasley空の配列として設定できます:order:[]
hogarth45 '31

2
5と私がここで7を指定していた鉱山の列!ありがとう
aiffin '12 / 12/13

1
1!週間!丸一週間!そして、それは7日間の週です!そして、私は9対5で作業していなかったと確信しています。9から真夜中のように... このバグについて知らなかっため、すべてが失われまし !! あっ!...時間の浪費が多かったので、私は深く恥ずかしい思いをしました。インターネットを何度も何度も検索し、考えられるすべての解決策を試しました。これを「修正」することすらできません。そして、...たまたま、すでに絶望しています...私はあなたの答えに出会いました、そしてタダ!5分で、すべてが修正されました。私が金持ちだったら、10,000ユーロの小切手をお送りします— lol
Gwyneth Llewelyn

9

私にとって、バグはDataTables自体にありました。DataTables 1.10.9でソートするコードは、境界をチェックしません。したがって、次のようなものを使用した場合

order: [[1, 'asc']]

空のテーブルでは、行idx 1はありません->この例外により保証されます。これは、テーブルのデータが非同期でフェッチされていたために発生しました。最初、ページの読み込み時にdataTableはデータなしで初期化されます。結果データがフェッチされたらすぐに更新する必要があります。

私の解決策:

// 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;

この問題について詳しく説明していただき、ありがとうございます。上記の @ hogarth45 は問題/バグを正しく識別しましたが、これが実際にはなぜであるかについてはそれほど明確ではありませんでし問題。私は2年後に回答します...どうやらこれは修正されておらず、少なくとも、私の知る限り、公式ドキュメントには言及されていません。
Gwyneth Llewelyn

7

同じ問題に直面しましたが、次の変更により問題が解決しました。

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

aoColumnsアレイは、各列とその幅記述するsortableプロパティを。

このエラーは、存在しない列番号で注文した場合にも発生します。


4

私の場合、私は持っていました

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

あるべき場所

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

注:私の場合、新しいデータを挿入する前に削除したいデータがあったため、テーブルを空にする必要がありました。

それが将来誰かを助けるかもしれない場所を共有することを考えただけです!


1

この問題が発生したのは、別のスクリプトがすべてのテーブルを削除して再作成していたためですが、テーブルが再作成されていませんでした。私のテーブルがページに表示されていないことに気付く前に、私はこの問題に何年も費やしました。DataTablesを初期化する前にテーブルを確認できますか?

基本的に、他のスクリプトは以下を実行していました。

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

そして、それはやっていたはずです:

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

1

解析のため、一[']重引用符を二重引用符に切り替える必要が["]あります

あなたが使用している場合は、データ次の表に属性を、このようにそれを使用しますdata-order='[[1, "asc"]]'


それはOPの質問には関係ありませんが、私のケースで機能します(html 5データ属性を使用)
blackbiron

-1

私の場合order、データテーブルを構成するスクリプト内でプロパティを適用するときに有効な列番号を設定することで問題を解決しました。

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

基本的に同じことを言っている他の答えはすでにあります。何年も前の質問に対する冗長な回答を避けてください。
thelr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.