0

基于这个讨论,在我的 JS 代码中添加了下面的代码,以便通过按 enter 键而不是 keyup 或延迟来触发过滤。

jQuery.fn.dataTableExt.oApi.fnSetFilteringPressEnter = function (oSettings) {
    var _that = this;

    this.each(function (i) {
        $.fn.dataTableExt.iApiIndex = i;
        var $this = this;
        var anControl = $('input', _that.fnSettings().aanFeatures.f);
        anControl.unbind('keyup').bind('keypress', function (e) {
            if (e.which == 13) {
                $.fn.dataTableExt.iApiIndex = i;
                _that.fnFilter(anControl.val());
            }
        });
        return this;
    });
    return this;
}

/* Example call */
$(document).ready(function() {
    $('.dataTable').dataTable().fnSetFilteringPressEnter();
} );

现在我想做的是,当用户从搜索栏中删除关键字时,我想重绘表格。目前它不会在不按 Enter 按钮的情况下重绘。我怎样才能达到这个结果?

4

2 回答 2

1

我认为在键盘的 keyup 事件上这样做是安全的,不像只在enter按键上触发。

anControl.off('keyup').on('keypress', function (e) {
        $.fn.dataTableExt.iApiIndex = i;
        _that.fnFilter(anControl.val());
});

另外,请注意,我使用on()andoff()来代替委派,从 jQuery 1.7 开始不推荐使用bindandunbind

或者,您可以为特定情况创建一个完全不同的处理程序,其中删除文本框中的所有关键字。

    anControl.off('keyup').on('keypress', function (e) {
        if (e.which == 13) {
            $.fn.dataTableExt.iApiIndex = i;
            _that.fnFilter(anControl.val());
        }
        if(anControl.val().length == 0) {
               //redraw table
        }

    });
于 2012-05-15T08:19:29.717 回答
0

.blur也许你可以通过使用jquery 的事件来实现你所需要的。当文本框失去焦点时..简单地将过滤器设置为这样的空字符串。

this.each(function (i) {
        $.fn.dataTableExt.iApiIndex = i;
        var $this = this;
        var anControl = $('input', _that.fnSettings().aanFeatures.f);
        anControl.unbind('keyup').bind('keypress', function (e) {
            if (e.which == 13) {
                $.fn.dataTableExt.iApiIndex = i;
                _that.fnFilter(anControl.val());
            }
        });
        anControl.blur(function(){
            _that.fnFilter('');
        });
        return this;
    });
    return this;
于 2012-05-15T08:27:46.670 回答