您可能希望链接在双击时执行特殊操作,从而阻止链接的默认操作(跳转到另一个页面)。所以
双击:执行特殊操作,完全不执行正常的点击事件
点击:正常工作
您需要在触发正常的点击操作时稍微延迟一下,并在发生双击事件时取消该操作。
function doClickAction() {
$("#click h2").append("•");
}
function doDoubleClickAction() {
$("#double-click h2").append("•");
}
var timer = 0;
var delay = 200;
var prevent = false;
$("#target")
.on("click", function() {
timer = setTimeout(function() {
if (!prevent) {
doClickAction();
}
prevent = false;
}, delay);
})
.on("dblclick", function() {
clearTimeout(timer);
prevent = true;
doDoubleClickAction();
});
Check out this Pen!
尝试点击,点击然后双击,您的脚本失败了
但我认为它运行良好!
使用数组进行settimeout
谢谢,这对我很实用。
在双击自动选择文本的时刻,是否会分配一个正常的点击事件?
如果您的操作系统双击阈值高于200毫秒(大多数情况下都是),则此脚本显然会失败。在“点击”点出现后再次点击 - 最有可能添加“双击”点,这是因为您的脚本已经完成了计时器,但操作系统当然仍然认为第二个点击是双击,但没有东西可以取消。
正确的解决方案是拥有单个点击事件处理程序,并检查是否有正在运行的计时器 - 如果有,则取消它并执行双击操作。已完成的计时器本身将执行单击操作。
您能否为您的解决方案提供一个代码示例
这在Chrome中运行良好,但在IE中不行。IE有什么解决方法吗?
太感谢了!我有一个使用了多年的应用程序,它在Chrome中无法正常工作,而这终于让我解决了它 :)
虽然看起来有点粗糙和笨重,但这是一个绝妙的解决方案。
这是一个启用双击的解决方案,但不需要JQuery的dblclick方法。它只使用click。
行“var sel = this;”没有必要。是代码的残留。
它对我不起作用,因为它按如下方式执行
两次快速点击(意图是双击)=> 点击事件处理程序执行两次,然后双击事件执行一次。因此,setTimeout在点击事件处理程序中执行了两次,因此“timer”指的是第二个超时对象。此第二个对象由双击事件清除,但第一个超时对象未清除。结果,我们执行了一次双击,然后执行了一次第一次单击。作为解决方案,在单击事件处理程序中,在创建timer = setTimeout(…)之前,我执行了clearTimeout(timer)。然后它按预期工作。
您需要混合使用超时和event.detail检查才能使其工作。
查看我在stackoverflow上的答案 - https://stackoverflow.com/a/60177326/670839
这是一个好主意,但当两次点击之间的时间在201毫秒到500毫秒之间时,两种操作都将被调用,因为两次点击触发dbclick事件的超时时间为500毫秒(Window OS中的默认值),因此此解决方案并非在所有情况下都能正常工作。
我修复此错误的解决方案