javascript - 单个列搜索上的数据表设置间隔函数

标签 javascript jquery datatables

我正在使用数据表 jquery 插件(https://datatables.net/),除了当我尝试延迟搜索各个列时,一切正常。

此代码有效但没有延迟

table.columns().indexes().each( function (idx) {
        $( 'input', table.column( idx ).footer() ).on( 'keyup change', function () {
            console.log(idx);
            console.log(this.value);
            table.column( idx ).search(this.value).draw();
            fixedColumns.fnRedrawLayout();
        } );
    } );

但是当我尝试使用 .. 实现搜索延迟(这使用服务器端处理)时

table.columns().indexes().each( function (idx) {
        $( 'input', table.column( idx ).footer() ).on( 'keyup change', function () {
            searchWait = 0;
            var searchstring = this.value;
            if(!searchWaitInterval) searchWaitInterval = setInterval(function(e){
                if(searchWait>=3){
                    clearInterval(searchWaitInterval);
                    searchWaitInterval = '';
                    var table = $('#example').dataTable();
                    console.log(idx);
                    console.log(searchstring);
                    table.column( idx ).search(searchstring).draw();
                    fixedColumns.fnRedrawLayout();
                    searchWait = 0;
                }
                searchWait++;
            },200);
        });
    });

出现以下错误

TypeError: table.column is not a function
table.column( idx ).search(searchstring).draw();

任何人都可以阐明这一点吗?

最佳答案

在这里找到解决方案 http://mattsnider.com/jquery-function-for-change-event-and-delayed-keydown-event/

$.fn.changeOrDelayedKey = function(fn, iKeyDelay, sKeyEvent) {
var iTimeoutId,
    oEventData;

if (!$.isFunction(fn)) {
    oEventData = arguments[0];
    fn = arguments[1];
    iKeyDelay = arguments[2];
    sKeyEvent = arguments[3];
}

if (!iKeyDelay || 0 > iKeyDelay) { iKeyDelay = 500; }

if (!sKeyEvent || !this[sKeyEvent]) { sKeyEvent = 'keydown'; }

function fnExecCallback() {
    clearTimeout(iTimeoutId);
    fn.apply(this, arguments);
}

function fnDelayCallback() {
    var that = this,
        args = arguments;
    clearTimeout(iTimeoutId);
    iTimeoutId = setTimeout(function() {
        fnExecCallback.apply(that, args);
    }, iKeyDelay);
}

if (oEventData) {
    this.change(oEventData, fnExecCallback);
    this[sKeyEvent](oEventData, fnDelayCallback);
}
else {
    this.change(fnExecCallback);
    this[sKeyEvent](fnDelayCallback);
}

return this;
};

我的用法如下:-

    table.columns().indexes().each( function (idx) {
        $('input', table.column( idx ).footer() ).changeOrDelayedKey( table ,function(e) {
            table.column( idx ).search(this.value).draw();
            fixedColumns.fnRedrawLayout();
        }, 500, 'keyup');
    });

关于javascript - 单个列搜索上的数据表设置间隔函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29387415/

相关文章:

javascript - 数据表自定义过滤器 AJAX 数据函数不调用 AJAX

jquery - Datatables.Buttons 在打印和导出到 Excel 时隐藏列

javascript - 如何在 Ckeditor 中添加字体和字体大小?

javascript - 如何在Asp.Net Mvc4中检查验证码后传递Email Id值?

javascript - Jquery - 是否可以将 css 悬停/焦点行为绑定(bind)到按键?

javascript - 无法替换onreadystate来加载

javascript - 一行中的 JQuery DataTable 单元格单击

javascript - HTML5 Canvas |弹跳球 |循环遍历图像数组并在每个球上放置不同的背景图像,居中

javascript - 找不到模块 : Error: Can't resolve 'X\node_modules\ng-zorro-antd\src\ng-zorro-antd.less'

javascript - 每次点击后元素 ID 加一?