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中使用attr(), prop(), val()获取value的异同
Apr 25 jQuery
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
使用vue与jquery实时监听用户输入状态的操作代码
Sep 19 jQuery
jQuery实现的鼠标滚轮控制图片缩放功能实例
Oct 14 jQuery
jQuery实现简单的回到顶部totop功能示例
Oct 16 jQuery
webpack里使用jquery.mCustomScrollbar插件的方法
May 30 jQuery
layui中使用jquery控制radio选中事件的示例代码
Aug 15 jQuery
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
Dec 05 jQuery
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
jQuery擦除插件eraser使用方法详解
Jan 11 jQuery
jQuery实现滑动开关效果
Aug 02 jQuery
JQuery使用数组遍历跳出each循环
Sep 01 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
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
PHP 微信支付类 demo
2015/11/30 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
chrome调试javascript详解
2015/10/21 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
Python 模板引擎的注入问题分析
2017/01/01 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
什么是servlet
2012/05/08 面试题
办公室内勤岗位职责范本
2013/12/09 职场文书
交通志愿者活动总结
2014/06/27 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
十岁生日答谢词
2015/01/05 职场文书
工作能力自我评价2015
2015/03/05 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
你会写请假条吗?
2019/06/26 职场文书