防止按钮多次点击

在开发中经常会用到按钮等点击动作,有时候因为各种原因用户频繁点击,可能会造成代码的多次运行等问题。

那么我们就要自己自定义一个点击类,使按钮在短时间内只能点击一次。

直接上代码:

/**
 *
 * 防止多次点击
 */
public abstract class NoDoubleClickListener implements View.OnClickListener {

    public static final int MIN_CLICK_DELAY_TIME = 1000;
    private long lastClickTime = 0;

    @Override
    public void onClick(View v) {
        long currentTime = Calendar.getInstance().getTimeInMillis();
        if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
            lastClickTime = currentTime;
            onNoDoubleClick(v);
        }
    }
    public abstract void onNoDoubleClick(View v);
}

使用方法:

//使用
 button.setOnClickListener(new NoDoubleClickListener() {
            @Override
            public void onNoDoubleClick(View v) {
               
            }
        });

挺简单的吧。

以下是几种常见的防止按钮多次点击导致重复提交的解决方案: ### 前端解决方案 #### 禁用按钮按钮点击后,立即禁用该按钮,直到请求响应返回后再恢复按钮的可点击状态。以下是一个使用 JavaScript 实现的示例: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <button id="submitBtn">提交</button> <script> const submitBtn = document.getElementById('submitBtn'); submitBtn.addEventListener('click', function () { // 禁用按钮 this.disabled = true; // 模拟异步请求 setTimeout(() => { // 请求完成后,恢复按钮点击状态 this.disabled = false; }, 2000); }); </script> </body> </html> ``` #### 时间戳判断 记录按钮上次点击的时间,当再次点击时,判断两次点击的时间间隔是否小于某个阈值,如果小于则不处理此次点击。示例代码如下: ```javascript let lastClickTime = 0; const clickThreshold = 2000; // 点击间隔阈值,单位:毫秒 const submitBtn = document.getElementById('submitBtn'); submitBtn.addEventListener('click', function () { const currentTime = Date.now(); if (currentTime - lastClickTime < clickThreshold) { return; } lastClickTime = currentTime; // 处理点击逻辑 }); ``` ### 后端解决方案 #### 令牌机制 在前端页面加载时,后端生成一个唯一的令牌(Token)并返回给前端,前端在提交表单时将该令牌一并发送给后端。后端接收到请求后,验证该令牌是否有效,如果有效则处理请求并将该令牌标记为已使用,后续再次使用该令牌的请求将被拒绝。以下是一个简单的示例: ```python from flask import Flask, request, session import uuid app = Flask(__name__) app.secret_key = 'your_secret_key' @app.route('/') def index(): # 生成令牌 token = str(uuid.uuid4()) session['token'] = token return f'<form action="/submit" method="post"><input type="hidden" name="token" value="{token}"><button type="submit">提交</button></form>' @app.route('/submit', methods=['POST']) def submit(): token = request.form.get('token') if token and token == session.get('token'): # 处理请求 session.pop('token', None) # 标记令牌已使用 return '提交成功' else: return '无效的请求' if __name__ == '__main__': app.run(debug=True) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值