将鼠标悬停在元素上然后刷新页面(不移动鼠标):
-
Chrome在页面加载时不会触发mouseenter事件
-
Firefox会在页面加载时触发mouseenter事件
以下是一个示例代码段 . 要重现此问题,请将鼠标悬停在 div
上,然后刷新页面 . 在Chrome中, div
不包含"mouseenter" . 在Firefox中,确实如此 .
请注意,这在Stacksnippets环境中不起作用,因为您需要先单击"run snippet" . JSFiddle:https://jsfiddle.net/9fu6cx5d/7/
let div = document.getElementById('my-div');
div.addEventListener('mouseenter', function () {
div.innerHTML = 'mouseenter';
});
#my-div {
width: 150px;
height: 150px;
background-color: #aaaaaa;
}
<div id="my-div">
</div>
哪个浏览器具有正确的行为?我如何解决行为差异或至少使它们的行为相同?
Chrome版本:59.0.3071.115(官方版)(64位)
Firefox版本:54.0(64位)
2 回答
正如评论中所指出的,根据规范,Chrome的行为是正确的 . 以下是如何解决差异的想法 .
您可以通过检查鼠标是否在文档加载的div范围内来确保您获得正确的值 . 不幸的是,JS没有办法在不触发事件的情况下检查鼠标位置,所以你将不得不求助于涉及CSS悬停规则的一些黑客并在
$(document).ready
上检查它们 .引用this hilarious answer:
虽然您绝对不应该在下面的示例中使用
font-weight
,但您可以将其更改为适合您的任何内容 .css
js
如果在代码周围添加
(function(){})();
,它似乎适用于两种浏览器 .似乎firefox可能在dom可用之前触发事件,导致mousein / out事件出现问题 .
见:https://jsfiddle.net/9fu6cx5d/8/