2017-02-17 4 views
1

У меня есть следующий код:Серверный поиск Аякса, ждать до завершения ввода - Multi столы

$('.gerais').each(function(){ 
    var daotable = $(this).data('dao'); 
    x = $(this).DataTable({ 
     serverSide: true, 
     ajax: { 
      url: $('body').data('url')+'gerais/ajax_list/'+daotable, 
      type: "POST" 
     }, 
     buttons: {    
      dom: { 
       button: { 
        className: 'btn btn-default' 
       } 
      }, 
      buttons: [ 
       { 
        extend: 'copyHtml5', 
        text: "<i class=' icon-copy3'></i> Copiar" 
       }, 
       { 
        extend: 'excelHtml5', 
        text: "<i class=' icon-file-excel'></i> Excel" 
       }, 
       { 
        extend: 'pdfHtml5', 
        text: "<i class=' icon-file-pdf'></i> PDF" 
       }, 
       { 
        extend: 'print', 
        text: '<i class="icon-printer"></i> Imprimir' 
       } 
      ], 
     } 
    }); 

}); 
$('.dataTables_filter input[type=search]').attr('placeholder','Pesquisar...') 
.unbind() 
.bind('input', function(e){ 
    var item = $(this); 
    searchWait = 0; 
    if(!searchWaitInterval) searchWaitInterval = setInterval(function(){ 
     if(searchWait >= 3){ 
      clearInterval(searchWaitInterval); 
      searchWaitInterval = ''; 
      searchTerm = $(item).val(); 
      x[z].search(searchTerm).draw(); // change to new api 
      searchWait = 0; 
     } 
     searchWait++; 
    },200); 

}); 

Эта часть кода отвечает за цикл, создавать таблицы данных на моей странице, то есть класс ".gerais":

$('.gerais').each(function(){ 
    var daotable = $(this).data('dao'); 
    x = $(this).DataTable({ 
     serverSide: true, 
     ajax: { 
      url: $('body').data('url')+'gerais/ajax_list/'+daotable, 
      type: "POST" 
     }, 
     buttons: {    
      dom: { 
       button: { 
        className: 'btn btn-default' 
       } 
      }, 
      buttons: [ 
       { 
        extend: 'copyHtml5', 
        text: "<i class=' icon-copy3'></i> Copiar" 
       }, 
       { 
        extend: 'excelHtml5', 
        text: "<i class=' icon-file-excel'></i> Excel" 
       }, 
       { 
        extend: 'pdfHtml5', 
        text: "<i class=' icon-file-pdf'></i> PDF" 
       }, 
       { 
        extend: 'print', 
        text: '<i class="icon-printer"></i> Imprimir' 
       } 
      ], 
     } 
    }); 

}); 

И это один отвечает задержкой по поиску

$('.dataTables_filter input[type=search]').attr('placeholder','Pesquisar...') 
.unbind() 
.bind('input', function(e){ 
    var item = $(this); 
    searchWait = 0; 
    if(!searchWaitInterval) searchWaitInterval = setInterval(function(){ 
     if(searchWait >= 3){ 
      clearInterval(searchWaitInterval); 
      searchWaitInterval = ''; 
      searchTerm = $(item).val(); 
      x[z].search(searchTerm).draw(); // change to new api 
      searchWait = 0; 
     } 
     searchWait++; 
    },200); 

}); 

Это работает WEL l только для одной таблицы, но у меня 3 таблицы, и она работает только с последней.

Я уже пытался преобразовать «х» в массив, и это не сработало.

+0

Это делают в DataTables плагинов – Space

+0

И я удалил де «[г]» на «х [г] .search (.....» – Space

+0

«привязывать» устарела. – Bindrid

ответ

0

Я внес некоторые незначительные изменения и протестировал его на двух клиентских сторонах (serverSide: false).

 $(function() { 
      $("#tabs").tabs(); 
      $('#tblTab1').DataTable(); 
      $('#tblTab2').DataTable(); 

       // definded global variable. 
       var searchWaitInterval = null; 
      $('.dataTables_filter input[type=search]').attr('placeholder', 'Pesquisar...') 
       .off() 
       .on('input', function (e) { 
        var item = $(this); 
        var searchWait = 0; 
        if (!searchWaitInterval) searchWaitInterval = setInterval(function() { 
         if (searchWait >= 3) { 
         clearInterval(searchWaitInterval); 
         searchWaitInterval = null; 
         searchTerm = $(item).val(); 
          // aria-controls is an attribute added by DataTables so it makes it easy to target the right 
          // tables without resorting to global variables. 
          $("#" + item.attr("aria-controls")).DataTable().search(searchTerm).draw(); // change to new api 
          searchWait = 0; 
       } 
       searchWait++; 
      }, 200); 

     }); 
    }); 
+0

Сказав, что использование события «ввода» с заполнителем вызывает его, просто нажав на поле, вы сделаете ненужную поездку на сервер, если пользователь нажмет на поле, но решит не вводить ничего. Если вы хотите сохранить местозаполнитель, я рекомендую вам изменить событие на «нажатие». – Bindrid

+0

Мне нужно «каждый », из-за некоторых страниц у меня есть 6 таблиц, все они делают запрос ajax для получения информации. И это pe rmit меня не имеет js-файл с n строками, которые делают то же самое. Знаете ли вы, что я могу сделать, чтобы эта функция работала в этом? – Space

+0

Я протестировал здесь и много работает, спасибо за вашу помощь. – Space