`
lizaochengwen
  • 浏览: 659642 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jquery同一元素支持单双击事件

阅读更多
发表于 2011 年 01 月 20 日 由 梦三秋

大家应该都知道javascript中鼠标单击和双击事件,一般情况下,对一个元素只需要绑定一个单击事件,或者绑定一个双击事件就可以了。但是有些特别的情况下,会对一个元素同时绑定单击和双击事件,并且这两个事件是不能相互干扰的。
用jquery的方法给一个元素同时绑定了单击和双击事件时,当我们双击时,结果为浏览器在响应一个双击事件的同时,还会响应一个单击事件。

从上面DEMO的演示中,我们会发现,当双击元素的时候,会先触发一次单击事件,然后再触发一次双击事件。

那么如何来实现当双击元素的时候,只触发元素绑定的双击事件而不触发元素绑定的单击事件呢?
下面来使用梦三秋开发的jquery区分鼠标单双击事件插件来具体实现给大家看看:

从上面的DEMO演示中,我们就可以实现双击事件只触发元素被绑定的双击事件,这样一来,元素的单双击事件就区分开来了。

接下来来看一个综合的例子:
HTML代码:
	<div id="div1">普通的单击和双击事件</div>
	<div id="div2">使用区分单双击插件</div>

jquery代码:
	$(function(){
	    //为ID为div1的div同时绑定普通的单双击事件
	    $("#div1").click(function(){
	        $(this).animate({left:"+=20"});//动画效果,让div1向右边滑动20个像素
	    }).dblclick(function(){
	        $(this).animate({top:"+=20"});//动画效果,让div1向下滑动20个像素
	    });
	 
	    //先初始化两个函数
	    var click_event = function(){//单击要触发的函数
	        $(this).animate({left:"+=20"});//注意:这里的this指向的是匹配的元素
	    };
	    var dblclick_event = function(){//双击要触发的函数
	        $(this).animate({top:"+=20"});//注意:这里的this指向的是匹配的元素
	    }
	    $("#div2").skygqOneDblClick({oneclick:click_event,dblclick:dblclick_event});//调用区分元素单双击事件的插件
	});


相信大家通过上面的几个例子,应该能看得很明白了这款插件已经能很好的区分鼠标的单双击事件了。

接下来就来和大家说说这个小插件的用法吧(其实上面的最后一个例子已经有了用法了。)
这个插件接受两个参数:
oneclick和dblclick
oneclick参数代表的是你要为匹配的元素绑定的单击事件触发的函数。
dblclick参数代表的是你要为匹配的元素绑定的双击事件触发的函数。
在这两个函数中,this指向的是匹配元素的对象,大家可以看最后一个DEMO就能明白了

这个插件很小,mini版的只有600多个字节,喜欢的可以点击下面的download图片拿走。

更新:
今天很感谢网友:yvonxiao 的提醒,要这个插件支持接收event。现在已经代码已经修正过了~~大家可以放心使用。为了方便大家能有更好的建议。我把插件源码帖出来吧~~上面的下载也是可以下载到源码的。
	;(function($){
	    $.fn.skygqOneDblClick = function(options){
	        return this.each(function(){
	            var s = $.extend({}, $.fn.skygqOneDblClick.Default, options || {});
	            var self_obj = this;
	            do_click = function(e){
	                clearTimeout(s.timer);
	                s.timer = setTimeout(function(){s.oneclick.call(self_obj,e);}, 400);
	            },
	            do_dblclick = function(e) {
	                clearTimeout(s.timer);
	                s.dblclick.call(self_obj,e);
	            };
	            $(this).click(do_click).dblclick(do_dblclick);
	        });
	    };
	    $.fn.skygqOneDblClick.Default = {
	        timer: null,
	        oneclick: $.noop,
	        dblclick: $.noop
	    };
	})(jQuery);


修改后的插件便能支持网友 yvonxiao 提出的这种用法了:
	$(function(){
	    var click_event = function(e){
	        $("#result").append("您单击了我");
	        alert("单击:"+e.target.tagName);
	    };
	    var dblclick_event = function(e){
	        $("#result").append("您双击了我");
	        alert("双击:"+e.target.tagName);
	    }
	    $("#div1").skygqOneDblClick({oneclick:click_event,dblclick:dblclick_event});
	});


大家如果有什么好的意见,请尽管说出来,谢谢了!
本文原地址:http://www.skygq.com/2011/01/20/jquery-%E5%8C%BA%E5%88%86%E9%BC%A0%E6%A0%87%E5%8D%95%E5%87%BB%E5%8F%8C%E5%87%BB%E4%BA%8B%E4%BB%B6%E6%8F%92%E4%BB%B6/
分享到:
评论

相关推荐

    jQuery触摸鼠标双击事件检测代码.zip

    "jQuery触摸鼠标双击事件检测代码.zip"这个压缩包正是为了解决在不同设备上,特别是触摸设备上实现双击事件检测的问题。 首先,我们要理解jQuery的核心概念。jQuery通过提供易于使用的API,使得开发者可以更方便地...

    js单击事件和双击事件并存绑定

    在这个例子中,我们使用了`e.stopPropagation()`来阻止双击事件向上冒泡,这样就不会触发与它绑定在同一元素上的单击事件。但是,这种方法并不完美,因为它可能会影响其他与双击事件相关的冒泡行为。 另一种解决...

    jq拖拽(支持双击事件和拖拽)

    本话题主要聚焦于使用jQuery实现拖拽功能,并且扩展到支持双击事件。这在网页设计中非常常见,例如在构建可交互的界面元素,如拖放式文件管理器或自定义布局工具时。 首先,我们来讨论jQuery的拖拽功能。在jQuery ...

    JQuery的ON()方法支持的所有事件罗列

    通过`on()`方法,你可以轻松地为同一元素或一组元素绑定多个事件,只需将事件名用空格分隔即可。例如: ```javascript $(element).on('click mouseover', function() { // 事件处理代码 }); ``` 这将同时绑定`click...

    jQuery mobile库包及例子

    1. **触摸优化**:jQuery Mobile 为移动设备上的手势事件(如滑动、点击、双击等)提供了内置支持,确保在触屏设备上的交互体验流畅。 2. **页面结构和导航**:通过使用特定的 HTML5 标签(如 `...

    jQuery防止click双击多次提交及传递动态函数或多参数

    总结来说,本文通过代码示例展示了如何使用jQuery来防止用户在短时间内多次点击同一元素导致的多次提交问题,并提供了动态绑定事件和传递参数的方法。在实际开发中,理解并掌握这些知识点对于优化用户体验和保证应用...

    初窥JQuery(二)事件机制(2)

    还有一种更加强力的方法event.stopImmediatePropagation(),它不仅阻止事件冒泡,还会阻止同一元素上其他事件处理函数的执行。 通过上述方法,JQuery使得事件处理变得简单高效。开发者可以很方便地为网页元素添加...

    js jq 单击和双击区分示例介绍

    双击事件(dblclick),则用于响应用户连续两次快速点击同一元素。其执行顺序为:mousedown(鼠标按下)、mouseout(鼠标离开元素)、click(鼠标释放),然后再次重复这个过程,最后触发 dblclick 事件。需要注意的...

    jQuery鼠标事件总结

    如果鼠标是在同一元素上按下并释放的,则在松开鼠标键之后会触发click事件。 示例代码: ```javascript $('p').mouseup(function(){ alert('mouseup function is running!'); }).click(function(){ alert('click ...

    jquery-fixclick:AlloVince 的 fixclick 插件的克隆 - 他的网站已关闭,因此这是基于浮动的 v1.0..

    不建议将处理程序绑定到同一元素的 click 和 dblclick 事件。 [...] 问题 当您在 DOM 元素上同时绑定和事件时,单击处理程序将在调用 dblclick 处理程序之前触发一次(或两次)。 解决方案 使用此插件,您可以...

    基于jquery的划词搜索实现(备忘)

    `GLS.dblclick`函数用于检测双击事件,`GLS.mousedown`和`GLS.mouseup`函数则分别处理鼠标按下和释放事件,以追踪用户的选取行为。 `GLS.mouseup`函数是核心部分,它获取选中的文本(`window.getSelection()`或`...

    上下左右键控制table中光标(兼容多浏览器)

    例如,`querySelector`和`addEventListener`在IE8及更早版本中不受支持,因此可能需要引入像jQuery这样的库来提供跨浏览器的解决方案。在这个例子中,压缩包中包含了一个名为`jquery.min.js`的文件,这可能用于处理...

    javascript 页面划词搜索JS

    - 在`GLS.mouseup`中,判断当前鼠标松开的元素不是链接(`A`)或输入框(`INPUT`),且与鼠标按下的是同一元素,未发生双击,且搜索允许,才进行后续处理。 - `strlen`用于获取选中文本的长度,如果长度大于0,说明有...

    easyui api

    - DataGrid 的 API 包括数据加载、列设置、事件绑定等多个方面,如 `loadData` 加载数据,`sort` 进行排序,`onDblClickRow` 处理双击行事件。 3. **Dialog 组件** - Dialog 用于创建弹出窗口,可以用于显示信息...

    z-tree API文档网页版

    - **节点(Node)**: `z-tree`中的基本单位,代表树形结构中的一个元素,包含ID、文本、父节点等属性。 - **树(Tree)**: 由多个节点组成的层级结构,可以通过API进行操作和管理。 2. **API详解** - **初始化**...

Global site tag (gtag.js) - Google Analytics