2016-12-06 4 views
0

私はDatatablesを使用しています。追加の日付フィルタリング機能を追加したいと思います。私はgoogleの例を見ていて、多くの異なる例を試しましたが、ブラウザのコンソールにエラーReferenceError: oTable is not definedが表示されます。Datatables日付範囲のフィルタリング - ReferenceError:テーブルが定義されていません

以下のスクリプトで何がうまくいかないのか探してもらえますか?

CODE:

date start: <input name="min" id="min" type="text"> 
date end: <input name="max" id="max" type="text"> 


$.fn.dataTableExt.afnFiltering.push(
    function(oSettings, aData, iDataIndex) { 

     var today = new Date(); 
     var dd = today.getDate(); 
     var mm = today.getMonth() + 1; 
     var yyyy = today.getFullYear(); 

     if (dd<10) 
     dd = '0'+dd; 

     if (mm<10) 
     mm = '0'+mm; 

     today = dd+'/'+mm+'/'+yyyy; 

     if ($('#min').val() != '' || $('#max').val() != '') { 
     var iMin_temp = $('#min').val(); 
     if (iMin_temp == '') { 
      iMin_temp = '01/01/1980'; 
     } 

     var iMax_temp = $('#max').val(); 
     if (iMax_temp == '') { 
      iMax_temp = today; 
     } 

     var arr_min = iMin_temp.split("/"); 
     var arr_max = iMax_temp.split("/"); 
     var arr_date = aData[2].split("/"); 

     var iMin = new Date(arr_min[2], arr_min[0], arr_min[1], 0, 0, 0, 0) 
     var iMax = new Date(arr_max[2], arr_max[0], arr_max[1], 0, 0, 0, 0) 
     var iDate = new Date(arr_date[2], arr_date[0], arr_date[1], 0, 0, 0, 0) 

     if (iMin == "" && iMax == "") 
     { 
      return true; 
     } 
     else if (iMin == "" && iDate < iMax) 
     { 
      return true; 
     } 
     else if (iMin <= iDate && "" == iMax) 
     { 
      return true; 
     } 
     else if (iMin <= iDate && iDate <= iMax) 
     { 
      return true; 
     } 
     return false; 
     } 
    } 
); 


$(document).ready(function(){ 

    var handleDataTableButtons = function(){ 

     if($('#datatable').length){ 
      var oTable = $('#datatable').dataTable({ 
       dom: 'Bfrtp', 
       buttons: [ 
        { 
        extend: "excel", 
        className: "btn-sm" 
        }, 
        { 
        extend: "print", 
        className: "btn-sm" 
        }, 
       ], 
       bLengthChange: false, 
       bJQueryUI: true, 
       responsive: false, 
       stateSave: true 
      }); 

     } 
    }; 

    TableManageButtons = function(){ 
     "use strict"; 
     return{ 
      init: function(){ 
       handleDataTableButtons(); 
      } 
     }; 
    }(); 

    TableManageButtons.init(); 

    $('#min, #max').keyup(function() { oTable.draw(); }); 
    $('#min, #max').change(function() { oTable.draw(); }); 

    $('#min, #max').datepicker({ 
     showOn: 'button', 
     dateFormat: 'dd/mm/yy', 
     buttonImage: 'images/calendar.png', 
     buttonImageOnly: false 
    }); 

}); 

答えて

0

それはifブロック内にのみアクセス可能ですので、あなたがoTableif内部の状態を定義しています。これは確かにあなたを助けるこのデモを通じて行ってください'「外if

このような
var oTable; 
$(document).ready(function(){ 

var handleDataTableButtons = function(){ 

    if($('#datatable').length){ 
     oTable = $('#datatable').dataTable({ 
      dom: 'Bfrtp', 
      buttons: [ 
       { 
       extend: "excel", 
       className: "btn-sm" 
       }, 
       { 
       extend: "print", 
       className: "btn-sm" 
       }, 
      ], 
      bLengthChange: false, 
      bJQueryUI: true, 
      responsive: false, 
      stateSave: true 
     }); 

    } 
}; 

TableManageButtons = function(){ 
    "use strict"; 
    return{ 
     init: function(){ 
      handleDataTableButtons(); 
     } 
    }; 
}(); 

TableManageButtons.init(); 

$('#min, #max').keyup(function() { oTable.draw(); }); 
$('#min, #max').change(function() { oTable.draw(); }); 

$('#min, #max').datepicker({ 
    showOn: 'button', 
    dateFormat: 'dd/mm/yy', 
    buttonImage: 'images/calendar.png', 
    buttonImageOnly: false 
}); 
}); 
+0

: 'TypeError例外:oTable.drawは、どのあなたがこれを取得しているラインfunction' – kefoseki

+0

はないですか? – Mairaj

+0

@kefoseki申し訳ありませんが、 'document.ready'が私の答えを編集する前にそれを宣言しました。 – Mairaj

関連する問題