3

在我的 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.

具体问题:

1)我所追求的与双击事件有什么关系吗?(当我看到触发警报时文本已经突出显示,我怀疑这可能是另一种机制。我怀疑(单击)事件的默认行为可能与它有关,但我取消了默认行为(单击)事件也是如此。)

2)如果它与 dblclick 事件无关,那么它与什么有关?我该如何预防?

3)如果是关于 dblclick 事件,我做错了吗?(顺便说一句,我想使用所有preventDefault()andcancelBubble = truestopPropagation()andreturn false是一种矫枉过正。为了防止默认行为,我需要的最少代码是多少?)

4)任何其他想法如何获得所需的结果(双击不选择并突出显示文本)?

我正在使用 FF 11 进行测试(但最终需要一个跨浏览器的解决方案)。

谢谢!

4

2 回答 2

4
myElem.onmousedown = function(e) {
    e.preventDefault()
}

编辑:将其从 return fasle 更改为 e.preventDefault,这仍将允许触发 click 事件。

于 2012-04-26T23:54:13.473 回答
1

有同样的问题,我马上在dblclick处理程序中添加了event.preventDefault()并没有帮助。我没有考虑的是事件冒泡以及默认行为在子元素中触发之前在父元素中触发的事实。

如果有多个孩子的父母,您仍然需要在其中选择文本,但不希望在双击时进行选择,有 2 个选项:

  1. 清除父事件处理程序中的选择,例如: window.getSelection().empty()。这种方法的问题是您会注意到所选文本的闪烁,并且在 Opera 中会有一个弹出窗口(“复制”、“搜索”)。
  2. 遍历所有孩子并在他们的dblclick中调用e.PreventDefault()
于 2018-12-05T10:49:56.157 回答