请问js 多个按钮防止连续点击,怎么封装,比如删除和提交和编辑在同一排
用一个变量lock标记上锁,某个按钮被按下,先检查lock,如果为true,不进行后续操作,否则通常会向后端发起请求,这时候设置lock为true,后端请求结束则lock为false。
var btn = document.getElementById('btn1')
var timer;
btn.addEventListener('click',function(){
if(timer){
clearTimeout(timer);
}
timer = setTimeout(function(){
console.log(btn.innerHTML); //触发change事件
},300);//在300ms内连续点击的话,只触发一次change事件
});
这样的话可以防止用户连续动作导致频繁触发事件,导致占用过多的资源
在一定时间内即使连续动作,也只触发一次事件
是事件节流的思想
13 回答12.8k 阅读
8 回答2.6k 阅读
2 回答5.1k 阅读✓ 已解决
7 回答2k 阅读
3 回答2.2k 阅读✓ 已解决
5 回答902 阅读
3 回答1.1k 阅读✓ 已解决
对同一数据项的不同操作如果互斥的话,连续操作会带来一些问题,比如前脚刚删掉一项,后面又要改它。
对这个问题,最好的解决方案是前端也维护一个数据列表,所有的增删改查先经过这个列表处理,最后再发给后端,但是这个要从程序设计上就考虑到。
当然也有临时救场的方法,对同一数据项的操作,如果后端还没返回,阻塞后续的操作:
这里在设计上还是有点缺陷,因为需要在 delete 和 modify 函数中手动换解除数据锁,可以进一步改进,不过这里已经够用,把 delete 和 modify 分别绑定对应的按钮就行了。
当然,仅仅是不允许频繁触发的话,讲节流和防抖的文章很多,也可以参考楼上的方法,我的方案会麻烦一点: