【问题标题】:Jquery datatables filterJquery 数据表过滤器
【发布时间】:2012-03-15 12:07:28
【问题描述】:

我有一个使用日历图像的数据表的日期过滤器,效果很好。 但是当我清除日期时,它不会显示所有日期。

如何制作一个按钮来显示所有可以清除日期过滤器的日期?

任何关于这方面的帮助/建议都会很棒,在此先感谢您。

// The plugin function for adding a new filtering routine
$.fn.dataTableExt.afnFiltering.push(
        function(oSettings, aData, iDataIndex){
            var dateStart = parseDateValue($("#dateStart").val());
            // aData represents the table structure as an array of columns, so the script access the date value 
            // in the first column of the table via aData[0]
            var evalDate= parseDateValue(aData[3]);

            if (evalDate == dateStart ) {
                return true;
            }
            else {
                return false;
            }

        });

// Function for converting a mm/dd/yyyy date value into a numeric string for comparison (example 08/12/2010 becomes 20100812
function parseDateValue(rawDate) {
    var dateArray= rawDate.split("/");
    var parsedDate= dateArray[1] + dateArray[0] + dateArray[3];
    return parsedDate;
}



$(function() {
    // Implements the dataTables plugin on the HTML table
    var $oTable= $("#example").dataTable( {
        "iDisplayLength": 20,
        "oLanguage": {
            "sLengthMenu": 'Show <select><option value="25">25</option><option value="50">50</option><option value="100">100</option><option value="200">200</option></select>'
        },
        "bJQueryUI": true,
        "aoColumns": [
                null,
                null,
                null,
                { "sType": "date" }
        ]                   
        }); 


    // The dataTables plugin creates the filtering and pagination controls for the table dynamically, so these 
    // lines will clone the date range controls currently hidden in the baseDateControl div and append them to 
    // the feedbackTable_filter block created by dataTables
    $dateControls= $("#baseDateControl").children("div").clone();
    $("#feedbackTable_filter").prepend($dateControls);

    // Implements the jQuery UI Datepicker widget on the date controls
    $('.datepicker').datepicker(
        {dateFormat: 'DD, d MM, yy', showOn: 'button', buttonImage: '../images/calendar.jpg', buttonImageOnly: true}
    );      

    // Create event listeners that will filter the table whenever the user types in either date range box or
    // changes the value of either box using the Datepicker pop-up calendar
    $("#dateStart").keyup ( function() { $oTable.fnDraw(); } );
    $("#dateStart").change( function() { $oTable.fnDraw(); } );

});

【问题讨论】:

    标签: jquery jquery-plugins datatables


    【解决方案1】:

    嗯,你试过了吗:

    $.fn.dataTableExt.afnFiltering.push(
            function(oSettings, aData, iDataIndex){
                var dateStart = parseDateValue($("#dateStart").val());
                //if filter is empty return everything
                if(dateStart === ''){
                    return true;
                }
                // aData represents the table structure as an array of columns, so the script access the date value 
                // in the first column of the table via aData[0]
                var evalDate= parseDateValue(aData[3]);
    
                if (evalDate == dateStart ) {
                    return true;
                }
                else {
                    return false;
                }
    
            });
    

    如果这不起作用,您可以在 jsfiddle 上发布一个示例吗?

    编辑 - 好的,问题出在parseDateValue(),它期望使用/ 创建日期。由于您想要完全匹配,您可以省略parseDateValue()

    // The plugin function for adding a new filtering routine
    $.fn.dataTableExt.afnFiltering.push(
        function(oSettings, aData, iDataIndex){
            var dateStart = $("#dateStart").val();
            //if filter is empty return everything
            if(dateStart === ''){
                return true;
            }
            // aData represents the table structure as an array of columns, so the script access the date value
            // in the first column of the table via aData[0]
            var evalDate= aData[3];
    
            if (evalDate == dateStart ) {
                return true;
            }
            else {
                return false;
            }
    
        });
    

    在这里摆弄http://jsfiddle.net/eMZtV/1/

    【讨论】:

    • 您好,感谢您的回复,我之前确实尝试过,但没有成功。这是jsfiddle:jsfiddle.net/eMZtV
    • 出色的作品就像魅力一样,谢谢。当我在搜索框中输入时,如何让它清除日期?我也可以有一张图片说显示所有可以清除日期框的图片
    • 谢谢,虽然它不会在清除输入时更新 dable。
    • Brilliant 所有作品都非常出色。非常感谢您的宝贵时间。
    • 这个答案对我帮助很大!谢谢@Nicola Peluchetti
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2012-10-17
    • 2011-09-12
    • 2014-01-12
    相关资源
    最近更新 更多