防止按钮暴力点击怎么实现

2024-01-18 20:48:52 浏览数 (2)

解决思路

第一种方法:在规定时间内将按钮禁用的方法

1.主要思想就是禁止用户在一定的时间多次点击,在一定时间内将按钮禁用,用定时器实现,一定时间之后用户可再次点击。

源代码
代码语言:javascript复制
 //一个保存按钮
  <el-button
	   type="primary"
	    @click="handleInspectionItemSave"
	    :disabled="is_click"   //这句话是要写的
	    v-loading.fullscreen.lock="inspectionItem.createLoading"
	    >{{ $t("commons.save") }}
  </el-button>
代码语言:javascript复制
  return {
    is_click: false,
  }
代码语言:javascript复制
  handleInspectionItemSave() {
      //按钮防止暴力点击
      this.$refs.inspectionItemForm.validate((v) => {
      this.is_click=true;
       setTimeout(()=>{
         this.is_click=false;
       },2000)
       }      
   }

上面这种效果是点击第一次后禁止点击。 下面这种效果是点击第一次后还能再点击,但是只会保存一次。

造成重复提交原因

由于AJAX提交数据为异步提交,所以当我们点击提交按钮是通过xmlhttprequest向服务器发送异步请求,发送请求需要有处理时间,我们第一次点击的请求尚未完成,就有接二连三的又提交了几次,同时后来发送的请求同事也被发送到后台处理了,这种情况如果是数据读取则不会有太大影响,但是涉及到数据提交保存或者提交之后多表数据处理就更麻烦了,所以此种情况务必要避免,免得给大家造成麻烦。

举一反三

其实第一种的方法思想与防抖类似,补充一下防抖

防抖: 在一定时间内,动作只会执行一次。 举个例子:我在网上买了很多东西,今天很多快递都会到,时不时的就会有快递小哥的电话,我不想来回去取快递,就每隔1个小时取一次,如果1个小时内没有快递,就不下楼拿快递了。 效果:第一次点击立即执行,后面的点击每隔一段时间执行一次。

那除了上面的一种方法之外,还有其他的方法可以解决防止按钮重复点击吗?答案是有的,下面再来看看其他的思路。

另一个思路是获取并记录时间,当再次点击时,时间间隔大于1s时才有效

0 人点赞