js事件被多次触发时,如何做到只执行最后一次事件函数

昨天遇到一个问题:微信购物车页面的数量增减按钮点击过快时,input里的值会乱跳

  看了源代码后发现,每次点击增减按钮后,整个购物车区域都通过ajax重新写入,而ajax写入是需要时间的,这就导致了点击过快时页面异步加载速度跟不上点击的速度,故此input里面的值会乱跳;

解决方案:

  1、在点击事件外面申明一个变量

    var iTime;

  2、给ajax的触发事件添加时间间隔,

    iTime=setTimeout(fun,250);

  3、每次点击事件触发时都清除之前的setTimeout事件

    clearTimeout();

最后代码如下:

  var iTime;

  element.οnclick=function(){

    clearTimeout(iTime);

    iTime=setTimeout(fun,250);

  }

其实上面这个方案所解决的就是事件被多次触发时,只执行最后一次事件,核心思想就是通过设置定时器来控制,通过定时器触发事件,在多次触发事件时清除之前的定时器事件,最后给定时器重新赋值,那么不管怎样都是只会运行最后一次的定时器事件。

转载于:https://www.cnblogs.com/webwangjie/p/7159632.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值