javascript - DataTables header 中的 jQuery UI Datepicker 未生成?

标签 javascript jquery filter datatable datepicker

我的数据表标题中有日期选择器。我这里需要两件事。

第一,在表外工作的相同日期选择器将无法在标题内工作(或包含日历图标)。我也尝试过通过 DOM 来实现这些,但这仍然不起作用,而且这种方式看起来不那么困惑。

第二,这些日期选择器应该充当表格的过滤器。因此,从 10 月 2 日到 10 月 4 日应该隐藏该括号之外的所有日期。有任何想法吗?提前致谢。

http://jsfiddle.net/Z85QC/12/

jQuery

$(".datepick").datepicker({
    showOn: "both",
    buttonImage: "http://www.effinghamparkdistrict.org/graphics/calendar_icon.png"
});

$('#example').dataTable({
    "bJQueryUI": true,
        "sPaginationType": "full_numbers",
        "aLengthMenu": [
        [5, 10, 15, 20, -1],
        [5, 10, 15, 20, "All"]
    ],
        "iDisplayLength": 10
});

$("<div class='nBreak padR'><label>Date Filter:</label>&nbsp;&nbsp;From <input type='text' class='datepick' />&nbsp;To <input type='text' class='datepick' /></div>").prependTo('div.dataTables_filter');

最佳答案

var oTable = $('#example').dataTable({
    "bJQueryUI": true,
        "sPaginationType": "full_numbers",
        "aLengthMenu": [
        [5, 10, 15, 20, -1],
        [5, 10, 15, 20, "All"]
    ],
        "iDisplayLength": 10
});

//added id's to text inputs to aid in attaching event listeners on date selects
$("<div class='nBreak padR'><label>Date Filter:</label>&nbsp;&nbsp;From <input id='min' type='text' class='datepick' />&nbsp;To <input id='max' type='text' class='datepick' /></div>").prependTo('div.dataTables_filter');

//datepicker initialization move to AFTER creation of the datatable so plugin could do it's thing
$(".datepick").datepicker({
    showOn: "both",
    buttonImage: "http://www.effinghamparkdistrict.org/graphics/calendar_icon.png"
});

//datatable documentation to push custom filtering functions
$.fn.dataTableExt.afnFiltering.push(
    function(oSettings, aData, iDataIndex){
        var iMin = document.getElementById('min').value;
        var iMax = document.getElementById('max').value;

        if(iMin == null || iMin == "")      {
            return true;
        }
        if(iMax == null || iMax == "")      {
            return true;
        }

        var minDate = new Date(iMin);
        var maxDate = new Date(iMax);

        var date = new Date(aData[1]); //column index 1 contains dates

        if( minDate <= date && date <= maxDate){
            return true;
        }
        return false;
    }
);

//Added events for listening to datepicker selects that will trigger the table to redraw and run the custom filtering
$('#min').datepicker("option","onSelect",function(dateString){
    oTable.fnDraw();
});

$('#max').datepicker("option","onSelect",function(dateString){
    oTable.fnDraw();
});

以下是更改(在代码中注释),基本上您需要:

  • 在网格创建之后移动日期选择器初始化,以便 其 header 中的日期选择器被创建。
  • 数据网格中的日期选择器被赋予了 ID,因此我们可以轻松地 将监听器附加到它们。
  • 数据表的文档允许用户定义自定义 使用 afnFiltering.push 调用过滤规则 (http://datatables.net/release-datatables/examples/plug-ins/range_filtering.html)
  • 最后,我们将 onselect 监听器附加到数据网格 日期选择器,以便表格将被重新绘制并运行自定义 过滤功能。

所有这些都在这里演示:http://jsfiddle.net/RP6Wn/

关于javascript - DataTables header 中的 jQuery UI Datepicker 未生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666590/

相关文章:

javascript - 如何使用 XFBML.ProfilePic

javascript - 如何在 Javascript 中删除上传的图片?

javascript - 如何替换 html 文本区域中当前选定的文本?

php - 清理/过滤用户评论的最佳方式?

javascript - 如何使用JavaScript在局域网中发现arduino的DHCP IP

JavaScript:具有多个元素的 OnClick 在该关键字下返回 "windows"

javascript - 使用JS更改段落文本

javascript - 下划线模板中未应用 jQuery 移动 css 样式

python - 如何通过 bool 列过滤 Spark 数据帧?

python - 带日期限制的总信息