【jQuery】マウスオーバーでポップアップを表示する際の注意(IE対策)
あるエリアをマウスオーバーするとボックスがポップアップで
表示される処理で、ボックスの位置合わせをするとき、
基準となるエリアの右や左ではなく、下に表示するのであれば、
X座標・Y座標を計算して設定するのではなく、appendで追加して
やれば簡単に位置合わせできるじゃないかと考えました。
<div id="親"><!--見えない-->
<div id="子"></div>
</div>
<div id="ポップアップ"></div><!--見えない-->
1行で済んで、お手軽です。
<div id="親"><!--見えない-->
<div id="子"></div>
<div id="ポップアップ"></div><!--appendされた-->
</div>
しかし、これではIEで問題があります。
【JavaScript】
$(親).mouseover(function(){
$(this).append(ポップアップ);
});
ポップアップにリンクやonclickなどを設定している場合、
それが全く働いてくれません。
そこで、その対策として3つの方法が考えられます。
素直にCSSのtop, leftを指定して位置を調整する
$(親).mouseover(function(){
var offset = $(this).offset();
$(ポップアップ).css({
'top':parseInt(offset.top, 10) + $(this).height(),
'left':parseInt(offset.left, 10)
});
$(ポップアップ).show();
});
チェック用変数を使って、重ねてappendするのを防ぐ
var check = false;
$(親).mouseover(function(){
if(check) return;
$(this).append($('#pop3'));
$('#pop3').show();
check = true;
});
ポップアップのmouseover時ににstopPropagationを設定
$(親).mouseover(function(){
//ここは最初のコードと同じ
$(this).append($(ポップアップ));
$(ポップアップ).show();
});
$(ポップアップ).mouseover(function(e){
e.stopPropagation();
});
【検証用ページ】
http://www.usamimi.info/~sutara/sample/jq_popup.php
個人的には、stopPropagationを使う方法がお手軽で
いいのではないかと思いました。