基于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键,它不会重绘。我怎样才能达到这个结果?
答案 0 :(得分:1)
我认为键盘上的键盘事件是安全的,而不仅仅是按enter
键按下。
anControl.off('keyup').on('keypress', function (e) {
$.fn.dataTableExt.iApiIndex = i;
_that.fnFilter(anControl.val());
});
另请注意,我已使用on()
和off()
代替{j} 1.7弃用的bind
和unbind
或者,您可以为特定案例创建一个完全不同的处理程序,其中所有关键字都会在文本框中删除。
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;