实现 Vue 框架用户短时间内多次点击同一按钮仅触发一次

举报
青年码农 发表于 2022/08/25 00:33:28 2022/08/25
【摘要】 点击上方“青年码农”关注 回复“源码”可获取各种资料 使用 Vue 框架开发项目中,遇到个问题,就是在用户提交数据时,如果连续多次点击按钮,会触发多次,导致数据异常,因此需要限制用户短时间内多次点击同一按钮,只触发一次。 1. 自定义指令 利用元素的 disabled 属性,新建自定义指令,preventClic...

点击上方“青年码农”关注

回复“源码”可获取各种资料

使用 Vue 框架开发项目中,遇到个问题,就是在用户提交数据时,如果连续多次点击按钮,会触发多次,导致数据异常,因此需要限制用户短时间内多次点击同一按钮,只触发一次。

1. 自定义指令

利用元素的 disabled 属性,新建自定义指令,preventClick.js


   
  1. 1export default {
  2. 2  install(Vue) {
  3. 3    Vue.directive('preventClick', {
  4. 4      inserted(button, bind) {
  5. 5        button.addEventListener('click', () => {
  6. 6          if (!button.disabled) {
  7. 7            button.disabled = true;
  8. 8            setTimeout(() => {
  9. 9              but.disabled = false
  10. 10            }, 2000)
  11. 11          }
  12. 12        })
  13. 13      }
  14. 14    })
  15. 15  }
  16. 16}

在 main.js 中引入

815d8f29baf2348b138de791bc44e6b7.png

组件中使用

ff411268f6269d4e9d77fc13f9424a98.png

2. 防抖函数

函数防抖的基本思想是设置一个定时器,在指定时间间隔内运行代码时清楚上一次的定时器,并设置另一个定时器,直到函数请求停止并超过时间间隔才会执行。


   
  1. 1export function debounce(fn, delay = 2000) {
  2. 2 // 记录上一次的延时器
  3. 3 var timer = null;
  4. 4 return function() {
  5. 5  var args = arguments;
  6. 6  var that = this;
  7. 7  // 清除上一次延时器
  8. 8  clearTimeout(timer)
  9. 9  timer = setTimeout(function() {
  10. 10    fn.apply(that,args)
  11. 11  }, delay);
  12. 12 }
  13. 13}

导入到组件中使用

3aa0587dae0601a5a0f5fac78cd36650.png

文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/NMGWAP/article/details/126258726

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。