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


Posted in Javascript onJuly 16, 2012

情况描述

当某个元素,如: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毫秒只是一个大概的。
作者:胡??

Javascript 相关文章推荐
JS性能优化笔记搜索整理
Aug 21 Javascript
jQuery实现分隔条左右拖动功能
Nov 21 Javascript
深入理解JavaScript中的对象复制(Object Clone)
May 18 Javascript
教你一步步用jQyery实现轮播器
Dec 18 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
微信小程序报错:this.setData is not a function的解决办法
Sep 27 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
jdk1.8+vue elementui实现多级菜单功能
Sep 24 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
Dec 09 Javascript
JavaScript事件的委托(代理)的用法示例详解
Feb 18 Javascript
js jquery数组介绍
Jul 15 #Javascript
js限制文本框只能输入数字(正则表达式)
Jul 15 #Javascript
基于jquery的图片幻灯展示源码
Jul 15 #Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
Jul 15 #Javascript
EasyUI 中 MenuButton 的使用方法
Jul 14 #Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 #Javascript
jQuery Tools tab(幻灯片)
Jul 14 #Javascript
You might like
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
python爬虫常用的模块分析
2014/08/29 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
十八大感想感言
2014/02/10 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
银行授权委托书样本
2014/10/13 职场文书
神农溪导游词
2015/02/11 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
试了下Golang实现try catch的方法
2021/07/01 Golang
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers