Home  >  Article  >  Web Front-end  >  js不完美解决click和dblclick事件冲突问题_javascript技巧

js不完美解决click和dblclick事件冲突问题_javascript技巧

WBOY
WBOYOriginal
2016-05-16 17:51:481059browse

情况描述
  当某个元素,如: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
';
var dblclickText = 'dblclick
';
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代码
复制代码 代码如下:

click
or
dblclick


后续
  文章标题里就说了,是不完美的,因为windows下,控制面板里是可以调鼠标的双击速度的(其他系统不清楚),所以我设置系统设置的双击速度较慢,则上面那个demo就不生效了。所以300毫秒只是一个大概的。
作者:胡尐睿
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn