js不完美解决click和dblclick事件冲突问题_Javascript教程-查字典教程网
js不完美解决click和dblclick事件冲突问题
js不完美解决click和dblclick事件冲突问题
发布时间:2016-12-30 来源:查字典编辑
摘要:情况描述当某个元素,如:div,同时绑定了click事件和dblclick事件,而这两个事件又要处理相对独立的业务,也就是click的时候不...

情况描述

当某个元素,如:div,同时绑定了click事件和dblclick事件,而这两个事件又要处理相对独立的业务,也就是click的时候不能触发dblclick,dblclick的时候不能触发click。在实际测试中发现,当dblclick的时候,总会出现1次click。下文将要解决的就是这个问题。

情况分析

首先我们要清楚click和dblclick的执行顺序,测试过程略,下面是测试结果:

click:mousedown -- mouseup -- click

dblclick:mousedown -- mouseup -- click -- mousedown -- mouseup -- click -- dblclick

由此看来,在dblclick触发之前,实际上是执行了2次click,而第一次的click是会屏蔽掉的(为什么?好把,我也不知道)。

解决方案

最先想到的是否可以停止事件,但发现浏览器并未提供相应方法,如果自己去实现难度太大,因为单击事件所关联的行为必须做成是可以被cancel的才行。

于是考虑用延迟,也是我唯一能想到的解决办法,利用setTimeout()来延迟完成click事件的处理,然后在需要屏蔽click的时候用clearTimeout()来停止。

具体代码

复制代码 代码如下:

var test = (function(){

var clickText = 'click<br>';

var dblclickText = 'dblclick<br>';

var timer = null;

return {

click: function(){

clearTimeout(timer);

timer = setTimeout(function(){

$('body').append(clickText);

}, 300);

},

dblclick: function(){

clearTimeout(timer);

$('body').append(dblclickText);

},

init: function(){

$(function(){

$('div').click(test.click).dblclick(test.dblclick);

});

}

}

})();

test.init();

html代码

复制代码 代码如下:

<div>click<br>or<br>dblclick</div>

后续

文章标题里就说了,是不完美的,因为windows下,控制面板里是可以调鼠标的双击速度的(其他系统不清楚),所以我设置系统设置的双击速度较慢,则上面那个demo就不生效了。所以300毫秒只是一个大概的。

作者:胡尐睿

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类