順序付けされていないリストのjqueryでmouseenterイベントとmouseleaveイベントを使用して<li>
、マウスがそれらの上にあるときに画像を表示しています。そのリストは通常、次のようになります。
<ul class="myTree">
<li class="treeItem" catid="1" catname="Category 1">
<img src="img/fleche_hori.png" class="expandImage"/>
Category 1
<img src="img/cross.png" class="hidden removecategory"/>
<ul>
<li class="treeItem" catid="2" catname="Subcategory 1 1">
<img src="img/spacer.gif" class="expandImage"/>
Subcategory 1 1
<img src="img/cross.png" class="hidden removecategory"/>
</li>
<li class="treeItem" catid="3" catname="Subcategory 1 2">
<img src="img/spacer.gif" class="expandImage"/>
Subcategory 1 2
<img src="img/cross.png" class="hidden removecategory"/>
</li>
</ul>
</li>
<li class="treeItem" catid="4" catname="Category 2">
...
</li>
</ul>
注:読みにくい場合があることは承知していますが、できるだけ読みやすくするために最善を尽くしました。
ご覧のとおり、これは展開/折りたたみツリーに使用される単なるツリーであり、各アイテムはクラス「treeItem」でマークされています。このクラスを維持する必要があります。これは、これらすべてのアイテムで共有される共通のクラスであり、マウスがそれらの上にあるときに画像を表示する必要があるため、イベントハンドラーをそれにバインドすることにしました。
mouseenter / mouseleaveで表示/非表示にする必要がある画像は、各アイテムの2番目です(src = "img / cross.png"の画像)。私はこのスクリプトでそれを非常に簡単に行うことができました:
$(document).on("mouseenter", ".treeItem", function (e) {
//e.stopPropagation();
$(this).children(".removecategory").show();
});
$(document).on("mouseleave", ".treeItem", function (e) {
//e.stopPropagation();
$(this).children(".removecategory").hide();
});
私の問題は、アイテムが展開されたとき(つまり、「カテゴリ1」が展開され、「サブカテゴリ11」と「サブカテゴリ12」が表示されるようになったとき)、マウスでサブカテゴリのいずれかにカーソルを合わせると、これらのサブカテゴリが画像は質問どおりに表示されますが、親カテゴリ(つまり「カテゴリ1」)の画像は、まだホバリングしているため非表示になりません...
e.stopPropagation();を使用してみました。しかし、それは何も良くしませんでした。
これを回避して、コンテンツの一部をホバーしているときに要素でマウスリーブをトリガーする方法を知っている人はいますか?
http://api.jquery.com/mouseleave/#example-0、特にコードブロックの下のデモをチェックして、私が何を意味するかを確認できます。通常(デモの右側)、マウスが黄色のコンテナに入ると、青いコンテナのmouseleaveイベントがトリガーされます。
説明するのが難しかったので、私の質問が明確であることを願っています...
編集:
mouseenterイベントハンドラーを次のように変更する方法を見つけました。
$(document).on("mouseenter", ".treeItem", function (e) {
$('.removecategory').each(function() {
$(this).hide();
});
$(this).children(".removecategory").show();
});
ただし、サブアイテムにカーソルを合わせた後に画像を再度表示するには、親アイテム全体(つまり、「カテゴリ1」アイテム)を残して再入力する必要があるため、これは完全ではありません。
誰かがより良い方法を持っているなら共有してください!