7

我有一个带有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) 不再表现出这种行为。

4

2 回答 2

1

我已经确认了这个问题。我什至尝试使用以下代码手动将事件传播到输入框:

<div id="foo" title="A tooltip 2"> <input title="A tooltip" type="text" id="bar"/>
</div>
<script type="text/javascript">
document.getElementById('foo').addEventListener(
    'mouseover',
    function(e) {
        e.stopPropagation();
        if (document.createEvent) {
            var inputBox = document.getElementById('bar');
            var evt = document.createEvent("MouseEvents");
            evt.initMouseEvent("mousemove", true, true, window, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, false, false, false, false, null, null);
            inputBox.dispatchEvent(evt);
        }
    },
    false
)
</script>

没有骰子。但是,其他鼠标事件,包括鼠标悬停,似乎工作正常。

我相信这是一个错误。虽然它没有在 bugzilla 中列出,但搜索似乎表明事件“鼠标悬停”和工具提示之间存在相关性。

您可以在此处下载最新的夜间版本的 Firefox,看看它是否仍然存在。如果是,请提交错误

作为替代方案,我会看看鼠标悬停是否会给你想要的效果。

于 2009-11-09T03:09:49.313 回答
0

我最近读到一些 firefox 插件(即 google 工具栏)会导致标题工具提示出现问题。停用它们并检查这是否可以解决您的问题。

于 2012-07-04T15:22:45.997 回答