【发布时间】:2014-03-03 21:29:20
【问题描述】:
我正在创建一个 Firefox 扩展程序,该扩展程序在单击该元素时获取有关网页上某个元素的一些信息(例如,该元素的 id 属性)。我还想实现一个功能,将鼠标悬停在元素上会突出显示它。
有一些现有的解决方案基本上已经做到了这一点。似乎这些现有的解决方案(例如 Firefox 的“Inspector”工具中的“使用鼠标选择元素”功能)本质上使用了两个事件侦听器:
-
mouseover监听器:突出显示您将鼠标移到元素上的任何元素。 -
mouseout侦听器:当您将鼠标从元素上移开时移除突出显示。 (否则,当您将鼠标移到整个页面上时,最终所有内容都会突出显示!)
我尝试使用这两个侦听器(onmouseover 和onmouseout)制作自己的实现。突出显示的应用方式与this tutorial 中的linktargetfinder 相同:每当我们想要突出显示元素时,我们将link-target-finder-selected 属性添加到元素的class 属性中。对 CSS 文件的 link 引用放入 HTML 文档的 head 并引用此 CSS 代码:
.link-target-finder-selected {
outline: 2px solid red !important;
}
这个实现非常接近我们想要的,但不幸的是,存在一些(最有可能相关的)问题。
首先,对于文本框,仅当鼠标位于文本框的边框上时才会突出显示。一旦你进入文本框的内部,显然mouseout 事件被触发——突出显示消失了,即使你或我很清楚鼠标实际上仍然悬停在文本框上。看来我需要以某种方式强制mouseout 事件不触发,直到您将鼠标完全移出文本框。
其次,我在多选框方面遇到了非常相似的问题。但我也希望多选框的行为有点不标准。实际行为是鼠标悬停将突出显示选择框;当您开始在选择框内移动时,突出显示将消失,然后选择框中的选项将在您移过它们时突出显示。相反,我希望我的插件能够在输入选择框时突出显示该框,并且在鼠标离开整个框之前不会突出显示或突出显示其他任何内容。这个问题的解决方法应该和文本框问题的解决方法基本一样。
如果您对如何解决这些问题有任何想法,请告诉我。
【问题讨论】:
标签: javascript onclick firefox-addon highlight onmouseover