问题
在实际生产中,我们经常会使用input框对数据内容进行搜索,显示包含特定内容的数据,如下图所示,想要完成对输入框键入数据的同时去后台搜索对应条件的数据,使用onkeyup事件即可,但是当查询条件还没输入完全,onkeyup便会进行搜索,会造成每次键盘输入都会在后台操作,这种过于频繁的后台操作不可取
解决方法
对onkeyup的事件做延迟发送请求操作,如在输入数据之后2秒后再发送请求,如果在2秒等待期间输入了数据,就结束本次计时,重新计时,使用到了js的window.setTimeout()和window.clearTimeout方法。
代码如下(示例):
var dt_title_event = null;
// 按名称搜索重载模板
function search_dt_title (self) {
if(dt_title_event) {
window.clearTimeout(dt_title_event);
dt_title_event = null;
}
dt_title_event = window.setTimeout(function(){
table.reload('delivery_temp', {
where: {
'title': self.value
}
});
}, 2500);
}
解释:
每次输入数据都会执行search_dt_title方法,创建一个全局的dt_title_event 对象,开始倒计时执行表格重载,若期间有输入新的内容,执行search_dt_title方法,因为dt_title_event 对象已经存在,所以会删除掉之前的全局对象,重新创建,重新倒计时执行。