使用DatePicker过滤DataTable

时间:2015-06-29 16:53:29

标签: javascript jquery datatable datepicker

我的页面中有一个名为'search_table'的DataTable。我在表中有一个额外的标题行,它有不同的过滤选项(下拉列表,文本,date_pickers)。对于日期列,我有两个日期选择器,一个用于分钟,一个用于最大值。我可以根据日期选择器过滤数据表的数据,但有一个问题:

当我选择一个日期时,我表中的所有行都会消失,我必须单击其中一个标题(比如对数据进行排序)以显示数据。一旦我这样做,正确的数据显示(日期在最小和最大之间)。

我使用什么功能强制数据贴纸重新绘制表格?在我的ready函数中,我有以下代码:

      $(document).ready(function() {
      var table = $('#search_table').DataTable();
      $(".datepicker").datepicker( {
          maxDate:0,
          changeMonth: true,
          changeYear: true,
          dateFormat: 'yy-mm-dd',
          onClose: function(selectedDate) {
              table.draw();}});
      $('#min_create, #max_create, #min_update, #max_update').keyup(function() { table.draw(); });
      $('#min_create, #max_create, #min_update, #max_update').click( function() { table.draw(); });
      $('#min_create').datepicker().bind('onClose', function(){ table.draw(); });
  });

min_create,max_create,min_update和max_update都是具有datepicker类的输入。 search_table是我的表,它是一个DataTable。

4 个答案:

答案 0 :(得分:4)

我从jsfiddle https://jsfiddle.net/bindrid/2bkbx2y3/6/

中得到了另一种选择
       $.fn.dataTable.ext.search.push(
          function (settings, data, dataIndex) {
        var min = $('#min').datepicker("getDate");
        var max = $('#max').datepicker("getDate");
        var startDate = new Date(data[4]);
        if (min == null && max == null) { return true; }
        if (min == null && startDate <= max) { return true;}
        if(max == null && startDate >= min) {return true;}
        if (startDate <= max && startDate >= min) { return true; }
        return false;
    }

答案 1 :(得分:1)

我有两个问题,当修复解决了我的问题。

在我准备好的功能中,我有

var table = $('#search_table').DataTable();

这应该是

var table = $('#search_table').dataTable();

然后,在我有的datepicker类的代码中

  $(".datepicker").datepicker( {
      maxDate:0,
      changeMonth: true,
      changeYear: true,
      dateFormat: 'yy-mm-dd',
      onClose: function(selectedDate) {
          table.draw();}});

需要将其更改为

  $(".datepicker").datepicker( {
      maxDate:0,
      changeMonth: true,
      changeYear: true,
      dateFormat: 'yy-mm-dd',
      onClose: function(selectedDate) {
          table.fnDraw();}});

答案 2 :(得分:0)

enter code here $.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 = mm + '/' + dd + '/' + yyyy;


        var Min_temp = '';
        var Max_temp = '';
        if ($('input[name="datefilter"]').val() == '') {
            Min_temp = '01/01/1980';
            Max_temp = today;

        } else {

            var arr_date = $('input[name="datefilter"]').val().split("-");
            Min_temp = arr_date[0].replace(' ', '');
            Max_temp = arr_date[1].replace(' ', '');

        }
        var arr_min = Min_temp.split("/");
        var arr_max = Max_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;

    }
);

过滤是这个

  $('input[name="datefilter"]').daterangepicker({
        autoUpdateInput: false,
        maxDate: today,
        locale: {
            cancelLabel: 'Borrar',
            applyLabel: 'Aceptar',
            daysOfWeek: ['Dom', 'Lun', 'Mar', 'Mié', 'Juv', 'Vie', 'Sáb'],
            monthNames: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic']


        }
    });

答案 3 :(得分:0)

大家好请找到我的代码以供参考,以处理daterangepicker筛选数据表,这对其他正在努力寻找相似解决方案的人将有所帮助。 以下是许多日期选择器问题的通用解决方案,请找到我所附的代码以供参考。

comments = db.relationship('Comments',backref='user',lazy='dynamic')

work = db.relationship('Work',backref='user',uselist=False
/*named as styles.css in link tag in html save it the same way to get the result */
#calendar{
        position: center;
        margin-top: 200px;
}

#tabledata{
 margin-top:50px;
 margin-right: 120px;
 margin-left: 120px;

}