Laravel-datatables: 詳細行で未定義のプロパティ「スタイル」を読み取れません

作成日 2017年06月12日  ·  10コメント  ·  ソース: yajra/laravel-datatables

問題または機能のリクエストの概要

datatablesの詳細行があります。 詳細行は正常に機能していますが、他のページに移動するとエラーが発生します。

問題のコードスニペット

ここに私のHTML

<table id="dt_basic" class="table table-striped table-hover" width="100%">
<thead>
   <tr>
   <th></th>
    <th class="text-center">ID</th>
    <th class="text-center">Nama Bank</th>
    <th class="text-center">Nama Akun</th>
    <th class="text-center">No. Rekening</th>
    <th class="text-center">Actions</th>
    </tr>
</thead>
</table>

<script src="<?php echo ASSETS_URL; ?>/js/handlebars-v4.0.10.js"></script>
<script id="details-template" type="text/x-handlebars-template">
    <table class="table">
        <tr>
            <td>Detail Info :</td>
            <td>Tidak ada informasi tambahan </td>
        </tr>
    </table>
</script>

私のJS

var template = Handlebars.compile($("#details-template").html());
$('#dt_basic').dataTable({
       processing: true,
       serverSide: true,
       ajax: 'datatables/dataBank',
       columns: [
            {
                "className":      'details-control',
                "orderable":      false,
                "searchable":     false,
                "data":           null,
                "defaultContent": ''
            },
            { data: 'id', name: 'id', orderable:true},
            { data: 'nama_bank', name: 'nama_bank', orderable:true },
            { data: 'nama_akun', name: 'nama_akun',orderable:true },
            { data: 'no_rek', name: 'no_rek',orderable:true },
            { data: 'action', name: 'action', 'searchable':false },
        ],
        "sDom": "<'dt-toolbar hidden-print'<'col-xs-12 col-sm-11'f><'col-sm-1 col-xs-12 hidden-xs'l>r>"+
          "t"+
          "<'dt-toolbar-footer hidden-print'<'col-sm-6 col-xs-12 hidden-xs'i><'col-xs-12 col-sm-6'p>>",
        "autoWidth" : true,
        "preDrawCallback" : function() {
          // Initialize the responsive datatables helper once.
          if (!responsiveHelper_dt_basic) {
            responsiveHelper_dt_basic = new ResponsiveDatatablesHelper($('#dt_basic'), breakpointDefinition);
          }
        },
        "rowCallback" : function(nRow) {
          responsiveHelper_dt_basic.createExpandIcon(nRow);
        },
        "drawCallback" : function(oSettings) {
          responsiveHelper_dt_basic.respond();
        },
        order: [[1, 'desc']],
        "lengthMenu": [[5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"]],
        'iDisplayLength': 50,
    });
$('#dt_basic tbody').on('click', 'td.details-control', function () {
          var tr = $(this).closest('tr');
          var row = table.row( tr );

          if ( row.child.isShown() ) {
              // This row is already open - close it
              row.child.hide();
              tr.removeClass('shown');
          }
          else {
              // Open this row
              row.child( template(row.data()) ).show();
              tr.addClass('shown');
          }
      });

注意

1ページにとどまってデータテーブルにアクセスすると、すべてが正常に機能します。 しかし、他のページに移動すると、このエラーが発生します

jquery.dataTables.min.js:62 Uncaught TypeError: Cannot read property 'style' of undefined
    at Ha (jquery.dataTables.min.js:62)
    at Z (jquery.dataTables.min.js:13)
    at t.<anonymous> (jquery.dataTables.min.js:126)
    at t.iterator (jquery.dataTables.min.js:100)
    at t.<anonymous> (jquery.dataTables.min.js:126)
    at Function.adjust (jquery.dataTables.min.js:103)
    at t.<anonymous> (jquery.dataTables.min.js:126)
    at t.visible (jquery.dataTables.min.js:103)
    at t.<anonymous> (jquery.dataTables.min.js:138)
    at t.iterator (jquery.dataTables.min.js:100)

これを削除すると

{
                "className":      'details-control',
                "orderable":      false,
                "searchable":     false,
                "data":           null,
                "defaultContent": ''
            },

エラーはなくなりましたが、テーブルに子行/詳細行がありません。 アージェイを助けてください
素晴らしいdatatablesをありがとう。

システムの詳細

  • オペレーティングシステム:Windows 10
  • PHPバージョン:5 ++
  • Laravelバージョン:5.4
  • Laravel-Datatablesバージョン:7.7
javascript question

最も参考になるコメント

返信が遅くなってすみません。 私の意見では、これは確かに列の数に関連しています。 HTMLに同じ数の<th><td>を確認してください。

全てのコメント10件

ページネーションのようなdataTableの他の拡張機能を使用していますか? 私は以前にこれに遭遇し、いくつかの拡張機能を削除することで修正したと思います。

他のdatatables拡張機能を使用していません。 SmartAdminテンプレートを使用していますが、すでにデータテーブルが含まれています。
このテンプレートのすべてのdatatablesjsを削除し、yajradatatablesを使用します。

いくつか例を挙げます。 ここで私のスクリーンショットをチェックしてください、あなたが私がこれを修正するのを手伝ってくれることを願っています:)
754pelx2axul 1
これは空白のページです。 ここには何もありません...

k71k9vk2vgj3 2
これはdatatablesページです。 最初のロード(または他のページからの最初のロード)。 このデータテーブルは完全に機能します。

zdhkg6mqy5x7
次に、別のページに移動します。 簡単に確認できるように、空白のページに移動しましょう。 そして、エラーが表示されます。 空白のページは、データのないデータテーブルページに変わります。


           {
                "className":      'details-control',
                "orderable":      false,
                "searchable":     false,
                "data":           null,
                "defaultContent": ''
            },

これを削除すると、evertyhingは正常に機能しますが、datatablesには詳細行がありません。 よろしくお願いします。
これを修正する方法がわかりません。 あなたの答えarjayをありがとう。

列数は変わりますか? 同じ問題が発生していますが、列数が変更された場合にのみ発生するようです。 何らかの理由で、dataTablesは前の反復からの列数の残りを保持しており、前のテーブルを破棄していません。 私はdestroyをtrueに設定しています。

返信が遅くなってすみません。 私の意見では、これは確かに列の数に関連しています。 HTMLに同じ数の<th><td>を確認してください。

私にとっての問題は、柱の残骸がぶら下がっていたので、それらの残骸を破壊しなければならなかったということでした。

var myDataTable = $("#" + this.options.id).DataTable(myOptions);
myDataTable.destroy(true);
const tableNode = $("<table id='164154654'></table>")
$(someContainer).append(tableNode);

テーブルノードを保存し、完全に破棄してから再作成したところ、問題は解決しました。

私の問題はまだ存在しています。 だから私はこの機能を使うつもりはないと思います。 hehe

返信ありがとうございます。

@nusendra

あなたのテーブルに<th></th>を入れてください


このように使用します

`関数フォーマット(d){
// console.log(d);
var data = "

"+
「」"+
「」 "+
「」 "+
「」 "+
「」 "+
「」 "+
「」 "+
「」 "+
// " "+
「」 ";
$(d.fornecedores).each(function (key, value) {

    // $(value.pagamentos).each(function (key, value1) {
    //     console.log(value1.html);
    // });


    data += '<tr>' +
        '<td>' + value.nome + '</td>' +
        '<td>' + value.nome + '</td>' +
        '<td>' + value.nome + '</td>' +
        '<td>' + value.nome + '</td>' +
        '<td>' + value.nome + '</td>' +
        '<td>' + value.nome + '</td>' +
        '<td>' + value.nome + '</td>' +
        //'<td>' + value.emitido + '</td>' +
        '</tr>';
});
return data;

}

`

ID開始日検証済み手順住所一般的な観測支払い発行済み

@gordettに感謝します。 私はもうデータテーブルを使用していません。 私はvuejsで独自のテーブルコンポーネントを構築しています

お返事をありがとうございます

こんにちは、Angularでjqueryデータテーブルを使用する問題があります。問題は私のthとtdの両方がAPIからのものですが、1回目と2回目は正しく機能し、正しいデータが表示されますが、フィルターと検索は以前のデータに対してのみ機能します。
誰でもこの問題の解決を手伝うことができます。

tabledestroyを使用する

if($ .fn.DataTable.isDataTable( '#mytable2'))
{{
$( '#mytable2')。DataTable()。destroy();
}
$( '#mytable2 tbody')。empty();

このページは役に立ちましたか?
0 / 5 - 0 評価