zoukankan      html  css  js  c++  java
  • 表单重复提交问题的三种解决思路

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

    最近开发遇到一个问题,找了挺久才找到原因解决-_-||,表单一直提交两次,以为是双击重复提交了,就在提交之后禁用提交按钮了,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
    
        }) 
      } 
    })
  • 相关阅读:
    18.06.30 POJ 2488:A Knight's Journey
    18.06.27 POJ 3414:Pots
    18.06.27 15年期末Stupid cat & Doge
    18.06.27 水题整理(3)--1st 上机
    18.6.27 水题整理(2)--2nd 上机
    18.6.27 一些没放上来的水题整理(1)--3rd 上机
    18.06.27 POJ NOI 7217猴子吃桃
    18.06.27 POJ NOI 4977怪盗基德的滑翔翼
    18.06.27 POJ百练 4124海贼王之伟大航路
    18.06.27 POJ1054 The Troublesome Frog
  • 原文地址:https://www.cnblogs.com/leiting/p/11013334.html
Copyright © 2011-2022 走看看