2016-01-18 4 views
0

При попытке доступа к .DataTable() ее функция всегда возвращает нуль, я действительно борется с этим ... Вот мой код: view jsfiddleDataTable.js - Всегда возвращает пустой массив

HTML:

<table id="example"> 
    <thead> 
     <tr> 
      <th> Name </th> 
      <th> Age </th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <th> Rotem </th> 
      <th> 18 </th> 
     </tr> 
     <tr> 
      <th> Bar </th> 
      <th> 13 </th> 
     </tr> 
     <tr> 
      <th> Shadmot </th> 
      <th> 8 </th> 
     </tr> 
     <tr> 
      <th> Devora </th> 
      <th> 78 </th> 
     </tr> 
    </tbody> 
</table> 

<button id="button"> Click me </button> 

<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script> 
<script src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"></script> 
</body> 

JAVASCRIPT:

$(document).ready(function() { 
    var b = $('#example').dataTable(); 

    $('#button').on('click', function() { 
     window.alert(b); 
    }); 
}); 

Большое спасибо

+0

Это работает для меня. – Bindrid

+0

b не является нулевым, но когда мне нужно использовать b (b.DataTable(), он всегда возвращает пустой массив) –

ответ

1

Что вы получили в b является API в библиотеку таблицы данных. Если вы его измените, скажите

$(document).ready(function() { 
    var b = $('#example').DataTable(); 

    $('#button').on('click', function() { 
     b.search("13"); 
     b.draw(); 
    }); 
}); 

вы получите правильный результат. Вы действительно должны прочитать руководства в это время, когда вы не можете уйти с диким угадыванием, как в старые времена.

0

Я немного изменил свой ответ. В обработчике кнопки я получаю экземпляр таблицы данных внутри обработчика. Обратите внимание, что я использовал капитал D для получения экземпляров. В моем примере q возвращает данные в массиве столбцов формы 2x4, а s = возвращает данные в виде строк из массива 4x4. Обратите внимание, что я также добавил таблицу стилей CSS и переместил ссылки на верх.

<!DOCTYPE html> 
    <html> 
    <head> 
     <title></title> 
     <meta charset="utf-8" /> 
     <link href="https://cdn.datatables.net/1.10.10/css/jquery.dataTables.min.css" type="text/css" rel="stylesheet" /> 
     <script src="https://code.jquery.com/jquery-2.2.0.min.js"></script> 
     <script src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"></script> 

     <script type="text/javascript"> 
      var b = null; 
      $(document).ready(function() { 
       b = $('#example').dataTable(); 

       $('#button').on('click', function() { 
        var q = $('#example').DataTable().columns().data(); 
        var s = $('#example').DataTable().rows().data(); 
       }); 
      }); 
     </script> 
    </head> 
     <body> 
      <table id="example" class='display'> 
       <thead> 
        <tr> 
         <th> Name </th> 
         <th> Age </th> 
        </tr> 
       </thead> 
       <tbody> 
        <tr> 
         <th> Rotem </th> 
         <th> 18 </th> 
        </tr> 
        <tr> 
         <th> Bar </th> 
         <th> 13 </th> 
        </tr> 
        <tr> 
         <th> Shadmot </th> 
         <th> 8 </th> 
        </tr> 
        <tr> 
         <th> Devora </th> 
         <th> 78 </th> 
        </tr> 
       </tbody> 
      </table> 
      <button id="button"> Click me </button> 
     </body> 
    </html> 
0

Вопрос не настолько глуп, что может появиться. У меня была та же проблема, но не из-за непонимания апи. Это связано с тем, что после инициализации основного файла данных на моей странице я загружал ajax некоторый частичный код HTML, который включал в него <script src="../dataTables.js">. Поэтому плагины DataTable загружались дважды на страницу. И конечно (даже мне потребовалось немного времени, чтобы понять ..), $(selector).DataTable().rows(), или $(selector).dataTable().api().rows(), оба возвращали пустой массив, в то время как моя таблица все еще была там и хорошо видна ... Удаление дублированного сценария datatable.js загрузка решена.

Смежные вопросы