jQuery 防止相同的事件快速重复触发方法


Posted in jQuery onFebruary 08, 2018

重复触发就是防止用户重复点击提交数据了,我们一般都是点击之后没反应会再次点击了,这个不但要从用户体验上来做好,还在要js或php程序脚本上做好,让用户知道点击是己提交服务器正在处理,下面我就整理从脚本上来处理此重复触发的问题。

很多时候事件会被快速重复触发,比如 click,这样就会执行两次代码,造成很多后果。现在有比较多的解决方法,但几乎都有局限性,比如一个 Ajax 表单,如果防止用户一次点好多下可以在第一次点击的时候冻结提交按钮,直到允许再次点击的时候再放开。很多人都这样干,但在其他的情况就不是很有效了。

下面推荐一个不错的方法,首先丢一个函数进去。

var _timer = {}; 
function delay_till_last(id, fn, wait) { 
 if (_timer[id]) { 
  window.clearTimeout(_timer[id]); 
  delete _timer[id]; 
 } 
 
 return _timer[id] = window.setTimeout(function() { 
  fn(); 
  delete _timer[id]; 
 }, wait); 
}

使用方法

$dom.on('click', function() { 
 delay_till_last('id', function() {//注意 id 是唯一的 
  //响应事件 
 }, 300); 
});

上面的代码可以让点击之后等待 300 毫秒,如果在 300 毫秒内又发生了这个事件则废除上一次点击,重新计时,反复如此,直到完全等待了 300 毫秒再响应事件。

这个函数很有用的,比如验证输入或者根据输入的邮箱实时拉去头像而不用等到必须失焦再拉取。

例子

按钮BUTTON类

a标签类

对于第一类情况,button有一个属性是disabled控制其是否可以点击,看代码

<input type="button" value="Click" id="subBtn"/> 
<script type="text/javascript"> 
function myFunc(){ 
 //code 
 //执行某段代码后可选择移除disabled属性,让button可以再次被点击 
 $("#subBtn").removeAttr("disabled"); 
} 
$("#subBtn").click(function(){ 
 //让button无法再次点击 
 $(this).attr("disabled","disabled"); 
 //执行其它代码,比如提交事件等 
 myFunc(); 
}); 
</script>

以上这篇jQuery 防止相同的事件快速重复触发方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery返回定位插件详解
May 15 jQuery
jquery图片放大镜效果
Jun 23 jQuery
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
jquery获取链接地址和跳转详解(推荐)
Aug 15 jQuery
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
Jan 25 jQuery
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 jQuery
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
Mar 06 jQuery
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
jQuery实现动态显示select下拉列表数据的方法
Feb 05 #jQuery
jQuery Dom元素操作技巧
Feb 04 #jQuery
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 #jQuery
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 #jQuery
jquery.picsign图片标注组件实例详解
Feb 02 #jQuery
jquery应用实例分享_实现手风琴特效
Feb 01 #jQuery
jQuery NProgress.js加载进度插件的简单使用方法
Jan 31 #jQuery
You might like
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
共享自己写一个框架DreamScript
2007/01/20 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
python用插值法绘制平滑曲线
2021/02/19 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
python 字符串常用方法汇总详解
2019/09/16 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
工厂实习感言
2014/01/14 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
全陪导游词
2015/02/04 职场文书
防暑降温通知书
2015/04/27 职场文书
公积金具结保证书
2015/05/11 职场文书
新教师教学工作总结
2015/08/14 职场文书