このJSfiddle では、マウスが下からピンクの innerDiv に入り、緑色の outerDiv に入らずに去った場合、緑色の outerDiv の mouseenter イベントがトリガーされないようにします。
Chrome と Opera では予想どおりの動作が発生しますが、Ffox では発生しません。
以下は、各ブラウザーの jsfiddle コードのコンソール出力に従います。
Chrome/Opera の出力 (正しい):
pink innerDiv mouseenter
pink innerDiv mouseleave
Ffox の出力:
pink innerDiv mouseenter
pink innerDiv mouseleave
left pink innerDiv but through green outerDiv
green outerDiv mouseenter
Ffoxが誤動作する理由と、Ffoxが正しく動作するようにコーディングする方法はありますか?
JSFiddle コード:
HTML:
<div class="outerDiv">
Outer div text
<div class="innerDiv">
Inner div text
</div>
</div>
CSS:
div.outerDiv {
position: relative;
height: 110px;
cursor: auto;
padding-top: 0;
background-color: #00A300 !important;
box-shadow: 0 0 1px #FFFFCC inset;
color: #FFFFFF;
display: block;
float: left;
font-family: 'Segoe UI Semilight','Open Sans',Verdana,Arial,Helvetica,sans-serif;
font-size: 11pt;
font-weight: 300;
letter-spacing: 0.02em;
line-height: 20px;
margin: 0 10px 10px 0;
overflow: hidden;
text-decoration: none;
width: 150px;
}
div.innerDiv{ position:absolute;
width: 100%;
bottom: 0;
background-color: magenta;
}
Javascript:
$('div.outerDiv').on('mouseenter', function(){ console.log('green outerDiv mouseenter'); });
$('div.outerDiv').on('mouseleave', function(){ console.log('green outerDiv mouseeleave'); });
$('div.innerDiv').on('mouseenter', function(){ console.log('pink innerDiv mouseenter'); return false; });
$('div.innerDiv').on('mouseleave', function(){
console.log('pink innerDiv mouseleave');
if($('div.outerDiv').is(':hover')){
console.log('left pink innerDiv but through green outerDiv');
$('div.outerDiv').trigger('mouseenter');
}
return false;
});
</p>