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查找dom的几种方法效率详解
May 17 jQuery
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
原生JS与jQuery编写简单选项卡
Oct 30 jQuery
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
webpack里使用jquery.mCustomScrollbar插件的方法
May 30 jQuery
jquery获取img的src值实例介绍
Jan 16 jQuery
jQuery+ajax实现批量删除功能完整示例
Jun 06 jQuery
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
jQuery实现每日秒杀商品倒计时功能
Sep 06 jQuery
jquery实现购物车基本功能
Oct 25 jQuery
jQuery实现轮播图效果
Nov 26 jQuery
Jquery ajax书写方法代码实例解析
Jun 12 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的类 功能齐全的发送邮件类
2006/10/09 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
python选择排序算法的实现代码
2013/11/21 Python
python django集成cas验证系统
2014/07/14 Python
Python中的闭包实例详解
2014/08/29 Python
python中的字典详细介绍
2014/09/18 Python
跟老齐学Python之再深点,更懂list
2014/09/20 Python
Python写入CSV文件的方法
2015/07/08 Python
python中set常用操作汇总
2016/06/30 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
python处理csv中的空值方法
2018/06/22 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
pytorch中图像的数据格式实例
2020/02/11 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
法律专业自我鉴定
2013/10/03 职场文书
工作收入证明模板
2014/10/10 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
《秋思》教学反思
2016/02/23 职场文书
win10安装配置nginx的过程
2021/03/31 Servers
解决Pytorch中关于model.eval的问题
2021/05/22 Python
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
Golang gRPC HTTP协议转换示例
2022/06/16 Golang