单击事件和双击事件冲突问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单击事件和双击事件冲突问题相关的知识,希望对你有一定的参考价值。

参考技术A 同一个元素上,绑定多种事件类型,比较常见的是单击事件和一些鼠标事件,一般而言影响不大。但是如果同时绑定单击事件和双击事件呢?

单击事件执行过程:mousedown, mouseup, click。双击事件的执行过程:mousedown, mouseup, click; mousedown, mouseup, click。仔细看,其实双击事件就是执行了两次单击事件,那这种情况下,怎么才能避免触发单击事件呢?

解决问题的关键在于延迟定时器setTimeout,单击事件延迟执行,如果检测到连续点击的话,就认为是双击事件,不在执行单击事件。

双击和单击事件冲突解决方法

双击和单击事件冲突解决方法:
关于单击事件和双击事件,如果单独拿出来都是非常简单,这里也就不多介绍了,具体可以参阅jQuery的click事件jQuery的dblclick事件一章节,但是如果同一个元素同时绑定了单击事件和双击事件,那么就会造成冲突现象,比如我们双击此元素指向触发双击事件,但是也完全满足单击事件的条件,不但双击事件触发了,单击事件同样也会被触发,下面就通过代码实例介绍一下如何解决它们的冲突问题,代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title> 
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script> 
<script type="text/javascript"> 
$(function(){ 
  var timer=null; 
  $("#bt").bind("click",function(){
    clearTimeout(timer); 
    timer=setTimeout(function(){
      $("#thediv").append("单击事件触发"); 
    },300); 
  }) 
   
  $("#bt").bind("dblclick",function(){
    clearTimeout(timer);
    $("#thediv").append("双击事件触发"); 
  }) 
}) 
</script> 
<body>
<div id="thediv"></div>
<input type="button" id="bt" value="查看效果"/>
</body>  
</html>

以上代码实现解决了单击和双击冲突的现象,单击或者双击按钮的时候只会有一个事件触发。
一.实现原理:
原理其实及其简单,就是延迟单击事件处理函数中相关代码的执行(当然并不是说单击事件没有触发),也就是当第一次点击按钮的时候,如果300毫秒内没有点击第二次,那么就认为这是一次单击事件,然后执行相关的代码,如果300毫秒内又点击了第二次,那么就会取消定时间函数的执行,单击事件处理函数中的相关代码将不会被执行,只会执行双击事件处理函数中的代码。
二.相关阅读:
1.bind()可以参阅jQuery的bind()方法一章节。
2.clearTimeout()函数可以参阅window对象的clearTimeout()方法一章节。
3.setTimeout()函数可以参阅window对象的setTimeout()方法一章节。 
4.append()函数可以参阅jQuery的append()方法一章节。

原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=13135

更多内容可以参阅:http://www.softwhy.com/jquery/

以上是关于单击事件和双击事件冲突问题的主要内容,如果未能解决你的问题,请参考以下文章

双击和单击事件冲突解决方法

双击和单击事件冲突解决方法

JQuery如何实现双击事件时不触发单击事件,解决鼠标单双击冲突问题

JQuery解决鼠标单双击冲突问题

jsponclick和selected冲突

如何区分鼠标的单击和双击事件