在我的 HTML 页面上有一个元素,上面有一些文本。我指定了单击该元素时要发生的操作。当用户连续多次点击元素时,有时会发生双击,导致文本被选中(突出显示),从而损坏外观。我尝试使用虚拟事件处理程序来阻止它,该处理程序可阻止双击 (dblclick) 事件的默认行为。然而,这似乎不起作用。似乎在执行我的虚拟事件处理程序之前,文本已被选择并突出显示。
function doNothing(event) {
alert('doNothing'); // Added for debugging. The alert is shown, meaning the event handler is invoked. When I get the alert, the text is already highlighted.
if(!event) event = window.event;
if(event.preventDefault) event.preventDefault();
event.cancelBubble = true;
if(event.stopPropagation) event.stopPropagation();
return false;
}
myElem.onlick = doSomething; // This is the event for a single click. Works well.
myElem.ondblclick = doNothing; // The event handler is called, but the text is already highlighted.
Run Code Online (Sandbox Code Playgroud)
具体问题:
1)我所追求的与双击事件有任何关系吗?(正如我看到的,当警报响起时,文本已经突出显示,我怀疑这可能是另一种机制。我怀疑(单击)事件的默认行为可能与它有关,但我取消了默认行为(单次)点击事件也是如此。)
2)如果它与 dblclick 事件无关,那么它与什么有关?我该如何预防?
3)如果是关于 dblclick 事件,我做错了什么吗?(顺便说一句,我想使用所有preventDefault()andcancelBubble = true和stopPropagation()andreturn false是一种矫枉过正。为了防止默认行为,我需要的最少代码是什么?)
4)还有其他想法如何获得所需的结果(双击不选择并突出显示文本)?
我正在使用 FF 11 进行测试(但最终需要跨浏览器解决方案)。
谢谢!
myElem.onmousedown = function(e) {
e.preventDefault()
}
Run Code Online (Sandbox Code Playgroud)
编辑:将其从 return fasle 更改为 e.preventDefault,这仍然允许触发单击事件。