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 相关文章推荐
node.js+jQuery实现用户登录注册AJAX交互
Apr 28 jQuery
jQuery插件imgAreaSelect基础讲解
May 26 jQuery
jQuery开源组件BootstrapValidator使用详解
Jun 29 jQuery
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 jQuery
基于jQuery选择器之表单对象属性筛选选择器的实例
Sep 19 jQuery
jquery自定义显示消息数量
Dec 19 jQuery
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
jQuery实现动态加载select下拉列表项功能示例
May 31 jQuery
jquery无缝图片轮播组件封装
Nov 25 jQuery
jQuery子选择器与可见性选择器实例分析
Jun 28 jQuery
jQuery HTML css()方法与css类实例详解
May 20 jQuery
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 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
德劲1107的电路分析与打磨
2021/03/02 无线电
php正则
2006/07/07 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php从字符串创建函数的方法
2015/03/16 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python根据成绩分析系统浅析
2019/02/11 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
股权收购意向书
2014/04/01 职场文书
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS