博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
表单重复提交问题的三种解决思路
阅读量:4648 次
发布时间:2019-06-09

本文共 1532 字,大约阅读时间需要 5 分钟。

前端开发中接触的表单提交还是很多的,有时候如果不对提交事件进行处理的话会遇到重复多次提交。

最近开发遇到一个问题,找了挺久才找到原因解决-_-||,表单一直提交两次,以为是双击重复提交了,就在提交之后禁用提交按钮了,but...

再试还是提交了两次,结果是label包裹input,点击label提交的时候提交两次,然后处理完这个,表单只提交是一次了正常的,但是最后一个选项没有正确的提交进去,,,最后在提交的时候加一个setTimeout(),终于解决问题

经过这次,总结出几条表单重复提交问题查找方向,主要从几个方面来考虑:

第一:如果是点击submit类型的按钮提交表单,就要先看是否是表单的默认提交事件,如果是,禁用默认提交事件(event.preventDefault();)或者改用button类型按钮提交

$('#submit').click(function(e){   e.preventDefault()})

 

第二: 如果是点击按钮ajax提交,就要在提交之后禁用掉按钮,以免重复提交,这个在平时各种情况下的表单提交都考虑进去

禁用按钮,加disabled属性,或者加pointer-event:none属性,或者用一个count来计数,只有在点击一次的时候才提交表单

通常在提交成功之后会刷新或跳转页面,失败则不会,要注意一下,如果提交失败,把禁用的按钮解除禁用

let count = 0;$('#submit').click(function(){   count++;   if (page.clicktime == 1) {   setTimeout(()=>{     $.ajax({       success:res=>{      if(!res.success){        count = 0  // 提交按钮解除禁用          }       },     error:err=>{      count = 0  // 提交按钮解除禁用       }     })   })  }   // $(this).attr('disabled,true) // 禁用按钮or   // $(this).css('pointer-event','none') // 来禁用点击事件})

 

第三: 如果是点击选项提交,那么就要考虑label和input的关联问题了,点击label, 事件冒泡,input也会触发一次提交

可以这样来处理

$('label').click(function(e) {      if($(e.target).is('input')){ // 点击label的时候,如果事件源是input,那么就把它禁用掉    return;  }});

 

最后,其他的点击事件也可以这样处理, 避免多次触发事件

var isclick = true$('#id').click(function(){   if(isclick){     isclick = false; // 如果双击不想触发两次点击事件,可以在这里加一个禁用点击事件     $(this).css('pointer-event','none')     // do something     setTimeout(()=>{ // 在这里过段时间再释放使得可以再次触发点击事件     $(this).css('pointer-event','none')    isclick = true    })   } })

 

转载于:https://www.cnblogs.com/leiting/p/11013334.html

你可能感兴趣的文章
python-综合练习题(if条件语句,while循环,奇数偶数
查看>>
C语言基础-第三章
查看>>
PowerDesigner教程系列(一)概念数据模型
查看>>
python常用类库总结
查看>>
题解 CF962C 【Make a Square】
查看>>
只读数据文件损坏恢复
查看>>
k8s集群上线web静态网站
查看>>
【转】Impala和Hive的关系
查看>>
IDEA操作git
查看>>
windows 下安装elasticsearch
查看>>
C语言学习12:带参数的main函数,无指定的函数形参,调用库函数处理无指定的函数形参,...
查看>>
禁止某程序联网
查看>>
[LOJ6191][CodeM]配对游戏(概率期望DP)
查看>>
mysql中utf8和utf8mb4区别
查看>>
谈谈源码管理那点事儿(一)——源码管理十诫(转)
查看>>
拒绝switch,程序加速之函数指针数组
查看>>
[你必须知道的.NET]第二十五回:认识元数据和IL(中)
查看>>
.NET中的三种Timer的区别和用法
查看>>
python第三方包安装方法(两种方法)
查看>>
MySQL 索引知识整理(创建高性能的索引)
查看>>