input事件:每次键盘输入触发。频繁触发会导致效率很低,所以最好是等用户输入停顿稍长时间后触发,这种情况可以用延时来实现,即防抖。
var globalTimeout = null;
$('#search').on('input', function () {
if (globalTimeout != null) {
clearTimeout(globalTimeout);
}
globalTimeout = setTimeout(function() {
globalTimeout = null;
console.log(this.value);//业务代码
}, 600);
});
用闭包封装优化之后:
$('#search').on('input', debounce(function () {
// 用debounce函数去约束input这个事件,实际执行的函数是function函数,防抖的延迟是600ms
console.log(this.value);//业务代码
}, 600));
function debounce(fn, delay) {
let timeout = null;
return function () {
if (timeout !== null) {
clearTimeout(timeout);
}
timeout = setTimeout(() => {
//利用call(),让this的指针从指向window 转成指向input
fn.call(this);
}, delay);
}
}