js怎么避免click短时间的多次执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js怎么避免click短时间的多次执行相关的知识,希望对你有一定的参考价值。

比如楼下说的方法,可以设置JS变量来,或者再标签上加自己定义属性,示例如下:

<input type="button" value="测试" state="0" id="btn" />
<script type="text/javascript">
    // JS的做法, 当然下面的也可以把点击时间做成函数,然后添加到空间上面
    document.getElementById("btn").onclick = function() 
        //获取按钮点击状态
        var s = this.getAttribute("state");
        if(s == '1') 
            alert("系统处理中,请不要重复点击!");
         else 
            // 设置点击状态,执行业务逻辑,设置处理中
            this.setAttribute("state", "1")
        
        // 下方写你的其他代码
        
        this.setAttribute("state", "0"); // 设置点击状态,执行完成清空点击
    
    // jQuery的做法
    $("#btn").click(function() 
        //获取按钮点击状态
        var s = $(this).attr("state");
        if(s == '1') 
            alert("系统处理中,请不要重复点击!");
         else 
            // 设置点击状态,执行业务逻辑,设置处理中
            $(this).attr("state", "1")
        
        // 下方写你的其他代码
        
        $(this).attr("state", "0"); // 设置点击状态,执行完成清空点击
    );
</script>

参考技术A 设置使能标记

避免多次提交

避免多次提交的方法:

1. 第一次提交表单后 就禁用提交按钮。 利用 disabled属性

$(element).attr("disabled", true)

2. 利用onsubmit事件处理 取消后续的表单提交操作《javascript高级教程3》

监听submit事件,并在该事件发生时就禁用提交按钮。

注:不能通过click事件实现,原因是不同browser处理submit和click的时机不同。

 EventUtil.addHandle(formElement, "submit", function(event){
    event = EventUtil.getEvent(event);
    var target = EventUtil.getTarget(event);
    var btn = target.elements["submit-btn"]; //取得提交按钮

    btn.disabled = true; //禁用  
  })

 

     

附加  EventUtil对象

参考:http://www.cnblogs.com/hykun/p/EventUtil.html

var EventUtil={
    
   addHandler:function(element,type,handler){ //添加事件
      if(element.addEventListener){ 
         element.addEventListener(type,handler,false);  //使用DOM2级方法添加事件
      }else if(element.attachEvent){                    //使用IE方法添加事件
         element.attachEvent("on"+type,handler);
      }else{
         element["on"+type]=handler;          //使用DOM0级方法添加事件
      }
   },  

   removeHandler:function(element,type,handler){  //取消事件
      if(element.removeEventListener){
         element.removeEventListener(type,handler,false);
      }else if(element.detachEvent){
         element.detachEvent("on"+type,handler);
      }else{
         element["on"+type]=null;
      }
   },

   getEvent:function(event){  //使用这个方法跨浏览器取得event对象
      return event?event:window.event;
   },
    
   getTarget:function(event){  //返回事件的实际目标
      return event.target||event.srcElement;
   },
    
   preventDefault:function(event){   //阻止事件的默认行为
      if(event.preventDefault){
         event.preventDefault(); 
      }else{
         event.returnValue=false;
      }
   },

   stopPropagation:function(event){  //立即停止事件在DOM中的传播
                                     //避免触发注册在document.body上面的事件处理程序
      if(event.stopPropagation){
         event.stopPropagation();
      }else{
         event.cancelBubble=true;
      }
   },
        
   getRelatedTarget:function(event){  //获取mouseover和mouseout相关元素
      if(event.relatedTarget){
         return event.relatedTarget;
      }else if(event.toElement){      //兼容IE8-
         return event.toElement;
      }else if(event.formElement){
         return event.formElement;
      }else{
         return null;
      }
   }
 ,
        
   getButton:function(event){    //获取mousedown或mouseup按下或释放的按钮是鼠标中的哪一个
      if(document.implementation.hasFeature("MouseEvents","2.0")){
         return event.button;
      }else{
         switch(event.button){   //将IE模型下的button属性映射为DOM模型下的button属性
            case 0:
            case 1:
            case 3:
            case 5:
            case 7:
               return 0;  //按下的是鼠标主按钮(一般是左键)
            case 2:
            case 6:
               return 2;  //按下的是中间的鼠标按钮
            case 4:
               return 1;  //鼠标次按钮(一般是右键)
         }
      }
   },
        
   getWheelDelta:function(event){ //获取表示鼠标滚轮滚动方向的数值
      if(event.wheelDelta){
         return event.wheelDelta;
      }else{
         return -event.detail*40;
      }
   },
        
   getCharCode:function(event){   //以跨浏览器取得相同的字符编码,需在keypress事件中使用
      if(typeof event.charCode=="number"){
         return event.charCode;
      }else{
         return event.keyCode;
      }
   }
        
};
        
EventUtil对象

 

以上是关于js怎么避免click短时间的多次执行的主要内容,如果未能解决你的问题,请参考以下文章

js scroll 滚动连续多次触发事件怎么只执行一次?

js scroll 滚动连续多次触发事件怎么只执行一次

#JS 窗口resize避免触发多次

uditor执行多次,JS执行多次

避免多次提交

selenium有多次点击的API吗??