【js】按钮频繁过快点击,防止重复提交处理

场景:收费处医生,为了提高效率,快速开单,经常会习惯性的多点保存/确认按钮;往往会发生多次请求,造成打印单据重复,结算金额对不上;故提出防止重复提交的控制;

解决方案:1.增加二次确认操作,弹框式确认;无疑会增加操作步骤,更麻烦了。2.防抖函数,控制在几秒内的点击只提交一次请求,记录最后一次点击开始计时请求;(待定)3.变量开关控制,保证几秒之内只提交一次,代码块立即

执行(可取)

实现:2.防抖函数

封装方法 例如:tools/index下Util对象中

【js】按钮频繁过快点击,防止重复提交处理

 

【js】按钮频繁过快点击,防止重复提交处理

 

 

 

 

 /*
     * 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变量储存

【js】按钮频繁过快点击,防止重复提交处理

// 按钮事件
handleBtn = () => {
	if(isClick) {
            isClick = false;
            //事件
            //定时器
            setTimeout(function() {
                isClick = true;
            }, 3000);//3秒内不能重复点击
	    //执行代码块

        }else{
	 message.warning("请勿重复点击!")
      }
}

  效果:

【js】按钮频繁过快点击,防止重复提交处理

 

上一篇:哈希的应用(2)——布隆过滤器


下一篇:mysql获取一张表中部分字段,再批量导入新表中