作家
登录

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

作者: 来源:www.28hudong.com 2013-03-30 00:25:53 阅读 我要评论

情况描述   当某个元素,如: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 style="width:100px;height:100px;background:red;text-align:center;line-height:33px;-moz-user-select:none;-khtml-user-select:none;user-select:none">click<br>or<br>dblclick</div> 后续   文章标题里就说了,是不完美的,因为windows下,控制面板里是可以调鼠标的双击速度的(其他系统不清楚),所以我设置系统设置的双击速度较慢,则上面那个demo就不生效了。所以300毫秒只是一个大概的。 作者:胡尐睿

  推荐阅读

  基于jquery的点击链接插入链接内容的代码

点击链接插入链接内容。 亮点:   1.正则匹配<a>标记。   2.jQuery单击添加,双击删除。   3.textarea加入换行。 核心代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona>>>详细阅读


本文标题:js不完美解决click和dblclick事件冲突问题

地址:http://www.17bianji.com/kaifa2/JS/23243.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)