如何做到这一点?
Answer 1:
这是一个很好的问题,我其实不认为这很容易做到。 ( 关于这方面的一些讨论 )
如果是超级骗子重要的是你有这个功能,你可以破解它,像这样:
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 。
Answer 2:
雷蒙德陈讨论了一些的单抗双击的影响 -虽然他在Windows的情况下在说话,他说的是相关的基于浏览器的UI设计。
基本上,在双击采取的行动应该是一个单一的点击后做一个顺理成章的事情。 因此,例如,在桌面UI,一次点击选择一个项目,然后双击打开它(如打开文件,或者启动应用程序)。 用户将不得不选择文件来打开它,所以它并不重要的是,单一的点击动作的双击动作之前进行。
如果你有一个UI组件,其双击动作是完全无关的单一的点击动作,使得它成为必要,以防止单一的点击行为的发生,一旦该系统实现它实际上是双击,那么你真的应该重新考虑你的设计。 用户会发现它笨拙和反直觉的,因为它不会在它们被用来充当事情的方式行事。
如果您仍然希望走那条路,那么你将不得不使用去抖动技术(在这种情况下,所有单一的点击动作将被推迟),或者实现某种机制,使双击处理程序撤消由单一的点击处理程序所做的工作。
你也应该知道,有些用户设置了很长双击时间。 有人用,例如,患有关节炎的手可能比在他们的系统偏好的第二组更双击时间,所以会根据您选择的一些任意时间段去抖动技术,使您的UI组件无法进入到那些人,如果采取单一的点击动作排除采取双击动作。 “撤消刚刚发生了什么单点击”技术是这一目标的唯一可行的解决办法,据我所知。
Answer 3:
在其他的答案中概述的技术被称为反跳 。
Answer 4:
jQuery的旌宇为此提供了一个整洁优雅的解决方案,通过实施singleclick自定义事件。 通过这样做,你可以使用它就像任何其他的事件,所以:
$('#el').singleclick(function(){});
// or event
$('#el').bind('singleclick', function(){});
它还提供了自定义事件的一系列点击的姓氏和点击。 而lastclick自定义事件实际上通过点击量回来了! 所以,你可以做到这一点!
$('#el').lastclick(function(event,clicks){
if ( clicks === 3 ) alert('Tripple Click!');
});
你可以找到源代码来定义自定义事件在这里 。
这是根据AGPL许可证开源的,所以你可以随意抢你需要什么出来呢无忧! :-)它也积极地在日常基础上发展起来,所以你永远不会成为短期的支撑。
但最重要的是它是干的插件/效果框架,让您可以更轻松地开发插件和扩展。 因此,希望这有助于实现这一目标!
Answer 5:
如果这是一个按钮提交表单(这不一定是原来的海报的情况,但也可以是其他人到达这里通过谷歌的情况下),但更简单的办法是禁用被点击的元素点击事件处理程序:
$(selector).click(function(e) {
$(this).prop('disable', true);
}