メニュー制御を行うために、jqueryでsuperfish(http://users.tpg.com.au/j_birch/plugins/superfish/#aa )を使用しています。ほぼすべての要素がで設定されています
$(document).ready(function () {
$("#menu").superfish({
delay: 400,
onHide: function () { $("#HideThis").hide(); }
});
});
ただし、代わりに、HideThisにカーソルを合わせるとHideThisが非表示になります(ホバーイベントはその要素にバインドされません)。これにより、メニューが閉じたときではなく、クリックしようとすると非表示になるため、メニュー項目が使用できなくなります。私の目的に合うイベントは他にないようですが、スーパーフィッシュでこれを機能させる方法はありますか?
私が使用しているHTMLは次のようになります。
<ul id="menu">
<li id="Stuff"><span>Stuff</span>
<ul>
<li id="HideThis" ><span>Hide This</span>
<ul>
<li><span>Hidden Stuff</span></li>
</ul>
</li>
<li id="DontHideThis" ><span>Dont Hide This</span></li>
</ul>
</li>
</ul>
編集:問題を見つけることができました:'onHide'イベントは、メニュー全体が非表示になったときだけでなく、サブメニューが非表示になるたびにトリガーされます(実際、メニューが最初に表示されたときにもトリガーされます。したがって、onHideはより頻繁に発生しますあなたが期待するよりも)。だから、私は次のようにonHideをフィルタリングする必要がありました:
$(document).ready(function () {
$("#menu").superfish({
delay: 400,
onHide: function () { if ($('ul.sf-menu li.sfHover').length == 0) $("#HideThis").hide(); }
});
});
また、「if」ステートメントは、すべてのメニューが折りたたまれている場合にのみ真になります。