避免按钮重复点击的小工具bimianchongfu.queren()

该博客讨论了一种防止用户在后台任务执行期间重复点击按钮的方法,通过创建一个名为`hf_running`的隐藏字段来标记操作状态。当后台任务正在进行时,`hf_running`的值设为1,否则为0。提供了一个JavaScript函数`bimianchongfu`用于检查并确认操作是否可以继续,确保不会因用户多次点击而重复执行长时间运行的任务,如资产折旧等。

按钮后台可能执行很长时间,这期间如果客户等不及再次点了按钮,可能会重复触发。

比如资产折旧,运行很长时间。

所以可以做一个hf_running的hiddenfield对象,设置值1表示正在运行,0表示没有。为兼容性用的纯js。

封装好了:

//避免重复运行,需要加一个hf_running的控件。用法:
//if (!bimianchongfu.queren('确认继续吗?')) return;
//执行具体业务代码
//执行完后,清空hf_running的值或者改成0
var bimianchongfu = {
    kongjian: { objRunning: "hf_running" },
    //检查是否正在运行,并提示,并设置值
    queren: function (AConfirmMsg, lShowAlert, strShowAlert, lMarkIsRunning) {
        var rt = this.zhengzaiyunxing(lShowAlert, strShowAlert, false);//检查正在运行
        if (rt) return false;       //正在运行,返回
        //确认
        var s = AConfirmMsg;
        if (AConfirmMsg == undefined || AConfirmMsg == null) s = "";
        if (s != "") if (!(rt = confirm(s))) return false;
        //
        if (lMarkIsRunning == undefined || lMarkIsRunning == null || lMarkIsRunning == true)
            this.set("1");
        //
        return true;
    },
    //读取是否正在运行
    zhengzaiyunxing: function (lShowAlert, strShowAlert, lMarkIsRunning) {
        var obj = this.kongjian.objRunning, v = "", l = false, s = strShowAlert, lAlert = lShowAlert;
        if (obj == undefined || obj == null) obj = document.getElementById("hf_running");
        else if (typeof (obj) == "string") obj = document.getElementById(obj);
        if (obj == undefined || obj == null) obj = document.getElementById("hf_running");
        if (obj != null && this.kongjian.objRunning == null) this.kongjian.objRunning = obj;//记下来
        v = obj.value;  //取值
        l = !(v == undefined || v == null || v == "" || v == "0" || v == "false");
        //提示信息
        if (l) {        //正在运行
            if (lShowAlert == undefined || lShowAlert == null) lAlert = true;
            if (strShowAlert == undefined || strShowAlert == null) s = "正在运行,请稍候";
            if (lAlert && s != "") alert(s);
        } else {        //没有运行,标记为正在运行
            if (lMarkIsRunning == undefined || lMarkIsRunning == null || lMarkIsRunning == true)
                this.set("1");
        }
        //完成返回
        return l;
    },
    //设置值
    set: function (val) {
        var obj = this.kongjian.objRunning, tp = typeof (obj);
        if (tp == "object") obj.value = val;
        else if (tp == "string") document.getElementById(obj).value = val;
        else document.getElementById("hf_running").value = val;
    }
};

classdef DoubleComper < handle properties %% 比较器实例 Comper1_Point Comper2_Point %% 比较器相关参数 DoubleComperMap % 输出值 len % 长度 RawData1 % 频点1 原始数据 RawData2 % 频点2 原始数据 %% 频点1 基础比较器相关参数 % 阈值相关 Comper1_MAXIMUM_VALUE_OF_BURRS = 2; % 毛刺的最大值 Comper1_TOUCH_THRESHOLD = 5; % 触摸阈值 Comper1_CONFIRM_THE_TIME_SLICE_THRESHOLD = 3; % 确认稳定的触摸阈值 % 确认参数相关 Comper1_TIME_SLICE_CONFIRMATION_TIMES = 5; % 时间片确认次数阈值 Comper1_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO = 14; % 震荡FIFO确认的阈值 Comper1_IDLE_FIFO_THRESHOLD = 9; % 空闲FIFO确认的阈值 Comper1_MAXIMUM_VALUE_CONFIRMATION_TIME = 3; % 最大值确认次数阈值 Comper1_MINIMUM_STABLE_FREQUENCY = 10; % 确认稳定的次数阈值 % 窗口大小 Comper1_THE_SIZE_OF_THE_OSCILLATING_FIFO = 16; % 震荡FIFO的窗口大小 Comper1_IDLE_FIFO_WINDOW_TIME = 6; % 空闲FIFO的窗口大小 % 时间相关 Comper1_LONGEST_INITIAL_DETECTION_TIME = 48; % 最长初次检测时间 Comper1_LONGEST_MATCH_WAITING_TIME = 80; % 最长匹配等待时间 Comper1_COOLING_TIME_AFTER_TOUCH = 25; % 触摸后冷却时间 Comper1_MAXIMUM_LONG_PRESS_DURATION = uint16(2000/7) % 最长长按时间 %% 频点2 基础比较器相关参数 % 阈值相关 Comper2_MAXIMUM_VALUE_OF_BURRS = 2; % 毛刺的最大值 Comper2_TOUCH_THRESHOLD = 5; % 触摸阈值 Comper2_CONFIRM_THE_TIME_SLICE_THRESHOLD = 3; % 确认稳定的触摸阈值 % 确认参数相关 Comper2_TIME_SLICE_CONFIRMATION_TIMES = 5; % 时间片确认次数阈值 Comper2_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO = 14; % 震荡FIFO确认的阈值 Comper2_IDLE_FIFO_THRESHOLD = 9; % 空闲FIFO确认的阈值 Comper2_MAXIMUM_VALUE_CONFIRMATION_TIME = 3; % 最大值确认次数阈值 Comper2_MINIMUM_STABLE_FREQUENCY = 10; % 确认稳定的次数阈值 % 窗口大小 Comper2_THE_SIZE_OF_THE_OSCILLATING_FIFO = 16; % 震荡FIFO的窗口大小 Comper2_IDLE_FIFO_WINDOW_TIME = 6; % 空闲FIFO的窗口大小 % 时间相关 Comper2_LONGEST_INITIAL_DETECTION_TIME = 48; % 最长初次检测时间 Comper2_LONGEST_MATCH_WAITING_TIME = 80; % 最长匹配等待时间 Comper2_COOLING_TIME_AFTER_TOUCH = 25; % 触摸后冷却时间 Comper2_MAXIMUM_LONG_PRESS_DURATION = uint16(2000/7) % 最长长按时间 end methods %% 构造函数 function obj = DoubleComper(RawData1 , RawData2) obj.Comper1_Point = TouchComper(); obj.Comper2_Point = TouchComper(); obj.len = length(RawData1); obj.len = length(RawData2); obj.RawData1 = RawData1; obj.RawData2 = RawData2; end %% 处理函数 function Map = DoubleComper_Process(obj) % 峰值 Comper1MHz_Point_PeakValue = zeros(obj.len,1,"double"); Comper13MHz_Point_PeakValue = zeros(obj.len,1,"double"); % 极性 Comper1MHz_Point_hiddenPolarity = zeros(obj.len,1,"double"); Comper13MHz_Point_hiddenPolarity = zeros(obj.len,1,"double"); % 计时器 Comper1MHz_Point_TimeCount = zeros(obj.len,1,"double"); Comper13MHz_Point_TimeCount = zeros(obj.len,1,"double"); % 震荡计数器 Comper1MHz_Point_TSD_ShakeCnt = zeros(obj.len,1,"double"); Comper13MHz_Point_TSD_ShakeCnt = zeros(obj.len,1,"double"); % FIFO的和 Comper1MHz_Point_FifoSum = zeros(obj.len,1,"double"); Comper13MHz_Point_FifoSum = zeros(obj.len,1,"double"); % 当前触摸状态 Comper1MHz_Point_CurrentTouchSt = zeros(obj.len,1,"double"); Comper13MHz_Point_CurrentTouchSt = zeros(obj.len,1,"double"); % 过去触摸状态 Comper1MHz_Point_PurrentTouchSt = zeros(obj.len,1,"double"); Comper13MHz_Point_PurrentTouchSt = zeros(obj.len,1,"double"); % 运算 for i = 1 : obj.len FilterResult1 = obj.RawData1(i); obj.Comper1_Point.New_TouchTheComparatorFunction(FilterResult1); % 峰值 Comper1MHz_Point_PeakValue(i) = obj.Comper1_Point.PeakValue; % 极性 Comper1MHz_Point_hiddenPolarity(i) = obj.Comper1_Point.hiddenPolarity; % 计时器 Comper1MHz_Point_TimeCount(i) = obj.Comper1_Point.TimeCount; % 震荡计数器 Comper1MHz_Point_TSD_ShakeCnt(i) = obj.Comper1_Point.TSD_ShakeCnt; % FIFO的和 Comper1MHz_Point_FifoSum(i) = obj.Comper1_Point.Fifo_Sum; % 当前触摸状态 Comper1MHz_Point_CurrentTouchSt(i) = obj.Comper1_Point.Current_TouchSt; % 过去触摸状态 Comper1MHz_Point_PurrentTouchSt(i) = obj.Comper1_Point.previous_TouchSt; end for i = 1 : obj.len FilterResult2 = obj.RawData1(i); obj.Comper1_Point.New_TouchTheComparatorFunction(FilterResult2); % 峰值 Comper13MHz_Point_PeakValue(i) = obj.Comper1_Point.PeakValue + 100 ; % 极性 Comper13MHz_Point_hiddenPolarity(i) = obj.Comper1_Point.hiddenPolarity + 100 ; % 计时器 Comper13MHz_Point_TimeCount(i) = obj.Comper1_Point.TimeCount + 100 ; % 震荡计数器 Comper13MHz_Point_TSD_ShakeCnt(i) = obj.Comper1_Point.TSD_ShakeCnt + 100 ; % FIFO的和 Comper13MHz_Point_FifoSum(i) = obj.Comper1_Point.Fifo_Sum + 100 ; % 当前触摸状态 Comper13MHz_Point_CurrentTouchSt(i) = obj.Comper1_Point.Current_TouchSt + 100 ; % 过去触摸状态 Comper13MHz_Point_PurrentTouchSt(i) = obj.Comper1_Point.previous_TouchSt + 100 ; end obj.DoubleComperMap = containers.Map(); obj.DoubleComperMap('1MHz的峰值') = Comper1MHz_Point_PeakValue; obj.DoubleComperMap('1MHz的极性') = Comper1MHz_Point_hiddenPolarity; obj.DoubleComperMap('1MHz的计时计数器') = Comper1MHz_Point_TimeCount; obj.DoubleComperMap('1MHz的FIFO的和') = Comper1MHz_Point_FifoSum; obj.DoubleComperMap('1MHz的超过阈值计数器') = Comper1MHz_Point_TSD_ShakeCnt; obj.DoubleComperMap('1MHz的比较器当前状态') = Comper1MHz_Point_CurrentTouchSt; obj.DoubleComperMap('1MHz的比较器过去状态') = Comper1MHz_Point_PurrentTouchSt; obj.DoubleComperMap('13MHz的峰值') = Comper13MHz_Point_PeakValue; obj.DoubleComperMap('13MHz的极性') = Comper13MHz_Point_hiddenPolarity; obj.DoubleComperMap('13MHz的计时计数器') = Comper13MHz_Point_TimeCount; obj.DoubleComperMap('13MHz的FIFO的和') = Comper13MHz_Point_FifoSum; obj.DoubleComperMap('13MHz的超过阈值计数器') = Comper13MHz_Point_TSD_ShakeCnt; obj.DoubleComperMap('13MHz的比较器当前状态') = Comper13MHz_Point_CurrentTouchSt; obj.DoubleComperMap('13MHz的比较器过去状态') = Comper13MHz_Point_PurrentTouchSt; Map = obj.DoubleComperMap; end %% 修改频点1 各种阈值修改函数 function Map = ChangeComper1yuzhi(obj,Comper_MAXIMUM_VALUE_OF_BURRS, ... Comper_TOUCH_THRESHOLD, ... Comper_CONFIRM_THE_TIME_SLICE_THRESHOLD) obj.Comper1_Point.Changeyuzhi(Comper_MAXIMUM_VALUE_OF_BURRS, ... Comper_TOUCH_THRESHOLD, ... Comper_CONFIRM_THE_TIME_SLICE_THRESHOLD); obj.DoubleComperMap = obj.DoubleComper_Process(); Map = obj.DoubleComperMap; end %% 修改频点1 各种确认参数修改函数 function Map = ChangeComper1queren(obj, ... Comper_TIME_SLICE_CONFIRMATION_TIMES, ... Comper_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO, ... Comper_IDLE_FIFO_THRESHOLD, ... Comper_MAXIMUM_VALUE_CONFIRMATION_TIME, ... Comper_MINIMUM_STABLE_FREQUENCY) obj.Comper1_Point.Changequerencanshu(Comper_TIME_SLICE_CONFIRMATION_TIMES, ... Comper_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO, ... Comper_IDLE_FIFO_THRESHOLD, ... Comper_MAXIMUM_VALUE_CONFIRMATION_TIME, ... Comper_MINIMUM_STABLE_FREQUENCY) obj.DoubleComperMap = obj.DoubleComper_Process(); Map = obj.DoubleComperMap; end %% 修改频点1 各种窗口大小修改函数 function Map = ChangeComper1Window(obj, ... Comper_THE_SIZE_OF_THE_OSCILLATING_FIFO, ... Comper_IDLE_FIFO_WINDOW_TIME) obj.Comper1_Point.Changechuangkou(Comper_THE_SIZE_OF_THE_OSCILLATING_FIFO, ... Comper_IDLE_FIFO_WINDOW_TIME); obj.DoubleComperMap = obj.DoubleComper_Process(); Map = obj.DoubleComperMap; end %% 修改频点2 各种阈值修改函数 function Map = ChangeComper2yuzhi(obj,Comper_MAXIMUM_VALUE_OF_BURRS, ... Comper_TOUCH_THRESHOLD, ... Comper_CONFIRM_THE_TIME_SLICE_THRESHOLD) obj.Comper2_Point.Changeyuzhi(Comper_MAXIMUM_VALUE_OF_BURRS, ... Comper_TOUCH_THRESHOLD, ... Comper_CONFIRM_THE_TIME_SLICE_THRESHOLD); obj.DoubleComperMap = obj.DoubleComper_Process(); Map = obj.DoubleComperMap; end %% 修改频点2 各种确认参数修改函数 function Map = ChangeComper2queren(obj, ... Comper_TIME_SLICE_CONFIRMATION_TIMES, ... Comper_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO, ... Comper_IDLE_FIFO_THRESHOLD, ... Comper_MAXIMUM_VALUE_CONFIRMATION_TIME, ... Comper_MINIMUM_STABLE_FREQUENCY) obj.Comper2_Point.Changequerencanshu(Comper_TIME_SLICE_CONFIRMATION_TIMES, ... Comper_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO, ... Comper_IDLE_FIFO_THRESHOLD, ... Comper_MAXIMUM_VALUE_CONFIRMATION_TIME, ... Comper_MINIMUM_STABLE_FREQUENCY) obj.DoubleComperMap = obj.DoubleComper_Process(); Map = obj.DoubleComperMap; end %% 修改频点2 各种窗口大小修改函数 function Map = ChangeComper2Window(obj, ... Comper_THE_SIZE_OF_THE_OSCILLATING_FIFO, ... Comper_IDLE_FIFO_WINDOW_TIME) obj.Comper2_Point.Changechuangkou(Comper_THE_SIZE_OF_THE_OSCILLATING_FIFO, ... Comper_IDLE_FIFO_WINDOW_TIME); obj.DoubleComperMap = obj.DoubleComper_Process(); Map = obj.DoubleComperMap; end end end 检查代码中存在的问题
最新发布
10-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值