jQ input事件延时触发(防抖)

文章讲述了如何使用防抖(debounce)技术优化input事件处理,避免频繁触发导致的性能问题。通过设置setTimeout和clearTimeout,确保用户输入停顿时再执行业务代码,提高应用性能。同时展示了使用闭包封装的防抖函数实现方式。
摘要由CSDN通过智能技术生成

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);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值