标签:status 防抖 name 计时 quarters 点击 按钮 js
场景:收费处医生,为了提高效率,快速开单,经常会习惯性的多点保存/确认按钮;往往会发生多次请求,造成打印单据重复,结算金额对不上;故提出防止重复提交的控制;
解决方案:1.增加二次确认操作,弹框式确认;无疑会增加操作步骤,更麻烦了。2.防抖函数,控制在几秒内的点击只提交一次请求,记录最后一次点击开始计时请求;(待定)3.变量开关控制,保证几秒之内只提交一次,代码块立即
执行(可取)
实现:2.防抖函数
封装方法 例如:tools/index下Util对象中
/* * fn [function] 需要防抖的函数 * interval [number] 毫秒,防抖期限值 * 在第一次触发事件时,不立即执行函数,而是给出一个期限值比如300ms * 让某个时间期限(300毫秒)内,事件处理函数只执行一次。 */ debounce(fn, interval) { var timeout = null;//借助闭包 return function (e) { clearTimeout(timeout);//进入该分支语句,说明当前正在一个计时过程中,并且又触发了相同事件。所以要取消当前的计时,重新开始计时 timeout = setTimeout(() => { // 进入该分支说明当前并没有在计时,那么就开始一个计时 fn.apply(this, arguments); }, interval ? interval : 300); }; },
引入方法
import { Util } from 'tools/index'; a.handleQuery = Util.debounce((name, status, quarters) => { console.log("---",name, status, quarters) //代码块 可接收参数 },2000)
b. 按钮事件 handleBtn
handleBtn=()=>{ let {status, name, quarters} = this.state; this.handleQuery(name, status, quarters); }
缺点:防抖函数每次会在设定时间内 记录最后一次点击,然后开始计时,会增加业务场景中的等待时间;
3.js控制变量
全局设置一个变量 或者state变量储存
// 按钮事件 handleBtn = () => { if(isClick) { isClick = false; //事件 //定时器 setTimeout(function() { isClick = true; }, 3000);//3秒内不能重复点击 //执行代码块 }else{ message.warning("请勿重复点击!") } }
效果:
标签:status,防抖,name,计时,quarters,点击,按钮,js 来源: https://www.cnblogs.com/522040-m/p/15585147.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。