【发布时间】:2010-11-03 12:57:00
【问题描述】:
我有一个带有title 属性的元素(即工具提示),包装在某个容器中:
<div id="foo">
<input type="text" title="A tooltip" />
</div>
我在容器上附加了一个"mousemove" 事件监听器并停止事件传播:
document.getElementById('foo').addEventListener(
'mousemove',
function(e) { e.stopPropagation() },
false
)
这种停止在容器上传播“mousemoves”的组合现在可以防止工具提示出现在内部文本框中,在 Firefox 中 2 及更高版本。我尝试过 FF 2[.0.0.20]、3[.0.11] 和最新的 3.5(Windows Server 2003、XP)。
作为一个快速练习,Firefox 用户可以通过在地址栏中运行以下等效逻辑来查看此错误:
javascript:void($('div.vote').mousemove(function(e){ e.stopPropagation() }))
现在将鼠标悬停在此问题的任何赞成、反对或星号(收藏夹)图标上。工具提示不再出现。 同样,仅在 Firefox 中。
是否有人对 Firefox 中的这种行为/错误有解决方法?有其他人目睹过吗?
更新:似乎 Firefox 使用“鼠标停止移动”来触发浏览器 chrome 中的工具提示(例如后退/前进按钮)。见https://bugzilla.mozilla.org/show_bug.cgi?id=82953。但是我不知道这是否会影响 DOM。
更新:Firefox 10 似乎是最后一个出现此行为的版本。无论事件传播如何,Firefox 11.0 及更高版本都会显示工具提示。
更新:Firefox 33(.1) 不再出现此行为。
【问题讨论】:
-
"当您将鼠标悬停在“投票”按钮上时,它不再出现工具提示。"错误。
-
同上,不会发生在我身上。
-
@Ian, @altCognito:您尝试使用哪个 Firefox 版本?
-
@Ian, @altCognito:你运行的是什么操作系统?
-
Crescent,我得到了与您描述的相同的行为 - Windows XP 上的 FF 3.0.11。如果我冒险猜测,我会怀疑 FireFox 使用 mousemove 来识别何时/是否显示工具提示,并通过停止事件传播来阻止它到达执行此操作的事件处理程序。您可能需要在不停止事件传播的情况下找到另一种方法来做您想做的事情。
标签: javascript firefox cross-browser dom-events