jquery单击事件和双击事件冲突解决方案

时间:2020-12-02 22:34:27
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
        .hello{
            width: 100px;
            height: 100px;
            background-color: red;    
        }
    </style>
</head>
<body>
    <!--
        原理:
        针对每一次触发双击事件都会引起两次单击事件,
        给单机事件添加定时器,当双击时清掉这个定时器就相当于取消了单机事件,
        
    -->
    <div class="hello"></div>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script>
    $(function() {
        /*        
          每一次触发双击事件都会引起两次单击事件
         $(".hello").bind("click.a", function() { //单击事件 
          $("body").append("<p>click事件</p>");
         })
         $(".hello").bind("dblclick.a", function() { //双击事件 
          $("body").append("<p>dblclick事件</p>");
         })
      */
     
     /*    
              var  timer=null;
              $(".hello").on("click.a", function() { //单击事件 
                      clearTimeout(timer);
                      timer=setTimeout(function(){
                          
                          $("body").append("<p>click事件</p>");
                      },300)
                 })
                 $(".hello").on("dblclick.a", function() { //双击事件 
                     clearTimeout(timer)
                  $("body").append("<p>dblclick事件</p>");
                 })
            })
        */
       
       var  timer=null;
     $(".hello").on("click dblclick", function(e) { //单击事件 
             console.log(e.type)//获取事件类型
             console.log(e.target)//获取事件目标
             if(e.type=='click'){
                 clearTimeout(timer)
                 timer=setTimeout(function(){
                     $("body").append("<p>click事件</p>");
                 },300)
                  
             }else if(e.type=='dblclick'){
                 clearTimeout(timer)
                  $("body").append("<p>dblclick事件</p>");
             }
         
         })
        
     })
    </script>
</body>
</html>