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

vue3——两种利用自定义指令实现防止按钮重复点击的方法

方法一:利用定时器设置时间,下方代码设置时间为1秒

但是有个缺点:请求如果很慢,1秒钟还没有好,那么该方法就没用了

  // 利用定时器:1秒之后才能再次点击app.directive('preventReClick', {mounted: (el, binding) => {el.addEventListener('click', () => {if (!el.disabled) {el.disabled = truesetTimeout(() => {el.disabled = false}, binding.value || 1000)}})}})

方法二:传入请求的函数作为参数,根据请求的finally来判断是否可以点击了,更推荐!!!

但是传入的参数必须是一个promise函数,否则就没用了

//自定义指令版本2:根据请求结果防止按钮重复提交请求//使用方式:传递一个请求函数,比如v-prevent-dup-click="submit"app.directive('preventDupClick', {mounted(el, binding) {//传递的参数必须是一个函数,否则报错if (typeof binding.value !== 'function') {throw new Error('v-prevent-dup-click instruction can transmit only A function')}// 一开始是未点击状态el.isClicked = falseconst handerClick = function (event) {// 如果已经点击过,则阻止事件if (el.isClicked === 'true') {event.preventDefault()event.stopPropagation()return}// 标记为已点击el.isClicked = 'true'// 调用传入的函数binding.value().finally(() => {el.isClicked = 'false'})}el.hander = handerClickel.addEventListener('click', handerClick)},//销毁事件beforeUnmount(el) {if (el.hander) {el.removeEventListener('click', el.hander)}}})

http://www.lryc.cn/news/407768.html

相关文章:

  • Chrome谷歌浏览器Console(控制台)显示文件名及行数
  • Vue3+Element Plus 实现table表格中input的验证
  • 安宝特方案|解放双手,解决死角,AR带来质量监督新体验
  • Django教程(005):基于ORM操作数据库的部门管理系统
  • git等常用工具以及cmake
  • Mybatis(四)特殊SQL的查询:模糊查询、批量删除、动态设置表明、添加功能获取自增的主键
  • JS原型与原型链
  • Python编程学习第一篇——Python零基础快速入门(六)(4)异常处理
  • GraphHopper-map-navi_路径规划、导航(web前端页面版)
  • 2-46 基于matlab的声音信号的短时能量、短时过零率、端点检测
  • 力扣630.课程表 II
  • 数字IC后端流程简述
  • 数学建模--整数规划和非线性规划
  • Linux-查看dd命令进度
  • 高效微调 100 多种大语言模型:先计算法,急速推理!
  • opencv grabCut前景后景分割去除背景
  • qt--电子相册
  • 【MSP430】MSP430F5529几个定时器
  • 苍穹外卖(一)之环境搭建篇
  • 【限免】16PAM、16PSK、16QAM、16CQAM星座图及误码率【附MATLAB代码】
  • 09-软件易用性
  • FPGA开发——独立仿真和联合仿真
  • 基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(二)|| 堆 / 栈
  • ABAP+从SAP发出去的PDF文件在第三方系统出现乱码
  • 基于springsecurity的会话并发处理功能(附代码)
  • Redis底层数据结构的实现
  • 制作excel模板,用于管理后台批量导入船舶数据
  • 领略诗词之妙,发觉生活之美。
  • 基于FFmpeg和SDL的音视频解码播放的实现过程与相关细节
  • SSIS_SQLITE