当前位置: 首页 > article >正文

Vue3中防止按钮重复点击的方式

本文列两种方式,推荐第一种,经过长时间测试第二种防止的还是会漏,这里也列一下

①使用定时器(推荐)

判断3秒钟之内方法只能执行一次

<el-button @click="handleClick" type="primary" :loading="formLoading">确 定</el-button>
// 定义按钮禁用变量,这里禁用了如果点的快还是能点两次,所以下面再定义一个定时器
const formLoading = ref(false)

// 定时器防止重复执行
const handleClick = () => {
  if (!isCooldown.value) {
    // 设置为冷却状态
    isCooldown.value = true; 
	// 执行业务逻辑
    submitForm(); 
    // 设置定时器,3秒后解除冷却状态
    setTimeout(() => {
      isCooldown.value = false;
    }, 3000);
  } else {
    message.warning('点太快啦')
  }
};

// 业务逻辑函数,提交、保存、修改等等
const submitForm = async () => {
	formLoading.value = true
	// ......各种自己的业务逻辑
	formLoading.value = false
}

②Vue3自定义指令

很多帖子都写的这种方式,我试着会漏,并且偶尔会导致其他按钮不可用,还是第一种方式简单粗暴可靠

main.ts

  const app = createApp(App)

  // 注册自定义指令 v-prevent-reclick
  app.directive('prevent-reclick', {
    beforeMount(el, binding) {
      el.disabled = false; // 初始化时启用按钮
      el.addEventListener('click', () => {
        el.disabled = true; // 点击后禁用按钮
        setTimeout(() => {
          el.disabled = false; // 在指定的时间后重新启用按钮
        }, binding.value || 2000); // 使用 binding.value 来设置等待时间,默认为 2000 毫秒
      });
    },
    unmounted(el) {
      // 组件卸载时移除事件监听器
      el.removeEventListener('click');
    },
  });

.vue文件

<el-button @click="handleClick" type="primary" v-prevent-reclick="2000">确 定</el-button>

http://www.kler.cn/a/349173.html

相关文章:

  • 标准IO练习
  • 已经安装了qt,想添加mingw组件,包含gcc等
  • 开源AI网络爬虫工具Crawl4AI
  • Vs配置opencv库 实例,opencv选用4.9.0版本,vs版本是2022社版,学习笔记不断更新
  • xss三种类型的区别与危害
  • SpringCloud-持久层框架MyBatis Plus的使用与原理详解
  • 基于SpringBoot+Vue的在线视频教育平台的设计与实现(带文档)
  • 本地流量配合美容院打法及生财合伙人推荐
  • 智能扭矩系统在轨道交通行业的应用_SunTorque
  • python入门教程
  • Linux防火墙与SElinux
  • 子组件向父组件传值$emit
  • Flink On kubernetes
  • uni-app 实现APP版本更新的深度解析
  • 【Redis】缓存预热、雪崩、击穿、穿透、过期删除策略、内存淘汰策略
  • Linux `vmstat` 命令详解
  • 7万字Java后端面试题大全(附答案)——持续更新
  • JavaScript将array数据下载到Excel中
  • 004、合并两个有序数组
  • 大数据治理:挑战与实践