2016-04-26 3 views
0

У меня возникли проблемы с функцией экспорта excel.DataTables - TypeError: this.s.subButton [c] - Экспорт Excel

Проблема возникла только в Firefox 45.0.2. В настоящее время я использую datatables 1.10.10 и Buttons 1.1.0 (buttons.colVis).

В хроме, краю и опера все работает так, как ожидалось.

Уже пробовали новейшие файлы dataTables, и кажется, что проблема также является частью выпуска 1.10.11.

$(document).ready(function() { 
       $.fn.dataTable.moment('DD.MM.YYYY HH:mm:ss'); 
       //INITILIAZE THE DATA TOGGLES 
       $('[data-toggle="tooltip"]').tooltip(); 
       //BEGIN - Show loading Modal and disable closing 
       $('#loadingModal').modal("show"); 
       $('#loadingModal').on('hide.bs.modal', function (e) { 
        e.stopImmediatePropagation(); 
        e.preventDefault(); 
        return false; 
       }); 

       var table = $('#dTable').DataTable({ 
        "ajax": '../php/ajax/views/relations/getAllRelations.php', 
        dom: 'Bfrtip', 
        stateSave: true, 
        iDisplayLength: 25, 
        "orderClasses": false, 
        buttons: [ 
         {extend: 'copy', className: 'btn btn-raised btn-default'}, 
         /* BUG IN FIREFOX */ 
         {extend: 'excel', className: 'btn btn-raised btn-default'}, 
         {extend: 'print', className: 'btn btn-raised btn-default'}, 
         {extend: 'colvis', text: 'Ansicht', className: 'btn btn-raised btn-default', columns: ':gt(0)'} 
        ], 
        "language": { 
         "url": "../php/ajax/views/relations/GermanDataTables.json", 
         buttons: { 
          copyTitle: 'Daten kopiert', 
          copy: 'Kopieren', 
          //excel: 'Excel', 
          print: 'Drucken' 
         } 
        }, 
        //BEGIN - Hide column "ID" 
        "columnDefs": [ 
         { 
          "targets": [0], 
          "visible": false, 
          "searchable": false 
         } 
        ], 
        "initComplete": function() { 
         //BEGIN - Close loading Modal and enable closing 
         $('#loadingModal').unbind(); 
         $('#loadingModal').modal("hide"); 
         $('.buttons-colvis').on('click', function() { 
          $(".dt-button-collection").children().removeClass('dt-button').addClass('btn btn-raised colvisstyle'); 

          $('.dt-button-collection').children('a').each(function() { 
           if ($(this).hasClass('active')) { 
            $(this).removeClass('btn-danger').addClass('btn-success'); 
           } 
           else { 
            $(this).removeClass('btn-success').addClass('btn-danger'); 
           } 

           $(this).on('click', function() { 
            if ($(this).hasClass('active')) { 
             $(this).removeClass('btn-danger').addClass('btn-success'); 
            } 
            else { 
             $(this).removeClass('btn-success').addClass('btn-danger'); 
            } 
           }); 
          }); 
         }); 
        }, 
        "rowCallback": function (row, data, index) { 
         switch (data[7]) { 
          case 1: 
           $(row).css('background-color', '#F44336'); 
           $(row).css('color', '#FFFFFF'); 
           break; 
          default: 
           break; 
         } 
        } 
       }); 
       $('#dTable tbody').on('click', 'tr', function() { 
        table.$('tr.selected').removeClass('selected'); 
        $(this).addClass('selected'); 
        var param = parseInt(table.cell('.selected', 0).data()) * 9452; 
        window.location.href = "editRelation.php?relation=" + param; 
       }); 
      }); 

Вот светлячок консольный вывод:

TypeError: this.s.subButtons[c] is undefined 
._buildButtons() 
datatables.min.js:216 
._buildButtons() 
datatables.min.js:215 
._buildButtons() 
datatables.min.js:216 
._constructor() 
datatables.min.js:214 
l() 
datatables.min.js:209 
.fnInit() 
datatables.min.js:238 
nb() 
datatables.min.js:69 
ia() 
datatables.min.js:85 
m/</<.success() 
datatables.min.js:128 
m.Callbacks/j() 
jquery.min.js:2 
m.Callbacks/k.fireWith() 
jquery.min.js:2 
x() 
jquery.min.js:4 
.send/b() 
jquery.min.js:4 

Если я закомментировать эту строку {удлиняет: 'первенствовать', Classname: 'БТН БТН-поднятый БТН-умолчанию'} все работает в Firefox , Если я установил эту строку, то firefox застрял при загрузке содержимого.

Любые идеи о том, как решить эту проблему?

+0

Почему вы считаете, что проблема связана с dataTables, когда ошибка возникает только в конкретной версии FireFox? Протестировано https://jsfiddle.net/zm825k01/2/ с FF 39.0, без проблем. Быстрый поиск google на 45.0.2 показывает, что многие люди внезапно сталкиваются с TypeErrors, «x isdedeined» и т. Д. С кодом, который всегда работал в других версиях и браузерах, поэтому я считаю, что проблема заключается в FF и проблема, которую невозможно решить из точка зрения dataTables (взлома для конкретной версии FF будет бессмысленной) ... Ссылка на номера строк из неминифицированных версий скриптов была бы полезна ... – davidkonrad

+0

проверял firefox 46.0, и ошибка по-прежнему является частью этого выпуск. Я проверю неминифицированный скрипт и дам вам знать. –

ответ

0

После нескольких недель я узнал, что я должен включать jszip библиотеку:

<script type="text/javascript" src="../plugins/DataTable/jszip-2.5.0/jszip.min.js"></script> 

Спасибо за помощь.