当检测到双击事件时,需要取消点击/鼠标事件

这是怎么做的?

这是一个很好的问题,我其实并不认为这可以轻易完成。 ( 关于这个的一些讨论 )

如果你拥有这个function对你来说非常重要,那么你可以这样做:

function singleClick(e) { // do something, "this" will be the DOM element } function doubleClick(e) { // do something, "this" will be the DOM element } $(selector).click(function(e) { var that = this; setTimeout(function() { var dblclick = parseInt($(that).data('double'), 10); if (dblclick > 0) { $(that).data('double', dblclick-1); } else { singleClick.call(that, e); } }, 300); }).dblclick(function(e) { $(this).data('double', 2); doubleClick.call(this, e); }); 

这是一个在工作中的例子 。

正如在评论中指出的那样,有一个插件可以做到我上面做的很多,但是为你打包,所以你不必看到丑陋的: FixClick 。

Raymond Chen已经讨论了单击双击的一些含义 – 尽pipe他在Windows环境下谈论,他说的是与基于浏览器的UIdevise相关的。

基本上,在双击之后采取的行动应该是合乎逻辑的事情。 例如,在桌面UI中,单击select一个项目,然后双击打开它(例如打开文件或启动应用程序)。 用户将不得不select文件来打开它,所以在双击动作之前进行单击操作并不重要。

如果你有一个UI组件,其双击动作与单击动作完全无关,那么一旦系统意识到它实际上是一个双击就有必要防止单击动作,那么你真的应该重新思考你的devise。 用户会发现它是尴尬和反直觉的,因为它不会像习惯事物那样行事。

如果你仍然想这样做,那么你将不得不使用去抖动技术(在这种情况下,所有的单击动作将被延迟),或者实现一些机制,双击处理程序撤销由单击处理程序完成的工作。

你也应该知道,一些用户设置了很长的双击时间。 例如,有关节手的人可能在系统偏好中的双击时间超过一秒钟,所以基于你select的任意时间段的去抖技术将使你的用户界面组件无法访问,如果采取单击行动排除采取双击行动。 就我所知,“撤销单击发生的事情”是唯一可行的解​​决方法。

在其他答案中概述的技术被称为反弹 。

jQuery Sparkle通过实现singleclick自定义事件为此提供了一个干净优雅的解决scheme。 通过这样做,你可以像使用其他事件一样使用它,所以:

 $('#el').singleclick(function(){}); // or event $('#el').bind('singleclick', function(){}); 

它还为一系列点击的最后点击和首次点击提供自定义事件。 而lastclick自定义事件实际上将点击量传递回来! 所以你可以做到这一点!

 $('#el').lastclick(function(event,clicks){ if ( clicks === 3 ) alert('Tripple Click!'); }); 

你可以在这里find定义自定义事件的源代码。

它是在AGPL许可证下的开源软件,所以你可以随心所欲地抓住你所需要的东西,无忧! :-)这也是积极发展的一天一天的基础上,所以你永远不会缺乏支持。

但最重要的是它是一个干的插件/效果框架,让您更容易地开发插件和扩展。 所以希望这有助于实现这一目标!

如果这是一个提交表单的button(原始海报不一定是这种情况,但其他人可能通过Google来到这里),更简单的方法是禁用正被点击的元素你的点击事件处理程序

 $(selector).click(function(e) { $(this).prop('disable', true); }