如果搜索栏为空,则重绘表格

时间:2012-05-15 08:14:00

标签: javascript jquery datatables

基于this discussion,在我的JS代码中添加了以下代码,以便通过按Enter键而不是键盘或延迟来触发过滤。

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键,它不会重绘。我怎样才能达到这个结果?

2 个答案:

答案 0 :(得分:1)

我认为键盘上的键盘事件是安全的,而不仅仅是按enter键按下。

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

另请注意,我已使用on()off()代替{j} 1.7弃用的bindunbind

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

    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
        }

    });

答案 1 :(得分:0)

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

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;