Cre*_*esh 7 javascript firefox cross-browser dom-events
我有一个带有title属性的元素(即工具提示),包含在一些容器中:
<div id="foo">
<input type="text" title="A tooltip" />
</div>
Run Code Online (Sandbox Code Playgroud)
我"mousemove"在容器上附加一个事件监听器并停止事件传播:
document.getElementById('foo').addEventListener(
'mousemove',
function(e) { e.stopPropagation() },
false
)
Run Code Online (Sandbox Code Playgroud)
停止在容器上传播"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() }))
Run Code Online (Sandbox Code Playgroud)
现在鼠标悬停在此问题的任何投票,投票或星标(收藏夹)图标上.工具提示不再出现.再次,仅在Firefox中.
有没有人在Firefox中有这种行为/错误的解决方法?有没人见过这个?
更新:Firefox似乎使用"鼠标停止移动"来触发浏览器镶边中的工具提示(例如后退/前进按钮).请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=82953.但是我无法判断这是否会影响DOM.
更新:Firefox 10似乎是出现此行为的最后一个版本.Firefox 11.0及更高版本显示工具提示,无论事件传播如何.
更新:Firefox 33(.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>
Run Code Online (Sandbox Code Playgroud)
没有骰子。但是,其他鼠标事件(包括鼠标悬停)似乎工作正常。
我相信这是一个错误。虽然 bugzilla 中没有列出它,但搜索似乎表明事件“鼠标悬停”和工具提示之间存在相关性。
您可以在此处下载最新的每晚版本的 Firefox,看看它是否仍然存在。如果是,请提交错误。
作为替代方案,我会看看鼠标悬停是否会给您带来所需的效果。
| 归档时间: |
|
| 查看次数: |
4101 次 |
| 最近记录: |