JSON からデータを回復し、製品のリストを生成するページがあります。ユーザーは、親 ul を ul.fullview に変更するボタンをクリックすると、2 つの異なるスタイルを切り替えることができます。ul.fullview をオンにして製品を閲覧すると、クラス .highlighted を受け取った製品はより大きなサムネイルで表示され、他の製品はレイアウトに収まるように絶対位置を受け取ります。これはすべて、CSS と単純な tooggleClass() によって行われます。問題は、これら 2 つの異なるビュー内の mouseenter / mouseleave イベントにあります。デフォルト ビューを使用してブラウジングする場合、すべての製品に同じアニメーションが表示されます。親 ul が .fullview の場合、.highlighted 製品には別のアニメーションが必要です。動的に追加された要素を扱っているため、.hover() の代わりに .on() を使用する必要がありました。
$('div.products ul:not(.fullview) li:not(.highlighted)').hover(
function () {
$(this).find($('div.tooltip')).show();
$(this).find($('div.fb-like')).fadeIn(150);
},
function () {
$(this).find($('div.tooltip')).fadeOut(150);
$(this).find($('div.fb-like')).fadeOut(150);
}
);
$('li.highlighted').hover(
function () {
$(this).find($('div.description')).show();
$(this).find($('div.fb-like')).fadeIn(150);
},
function () {
$(this).find($('div.description')).fadeOut(150);
$(this).find($('div.fb-like')).fadeOut(150);
}
);
上記のコードは、要素が JavaScript によって追加されていない場合に機能するはずです。以下のスクリプトを使用して、デフォルトのビューを機能させることができました。
$('div.products ul').on({
mouseenter: function () {
$(this).find($('div.tooltip')).show();
$(this).find($('div.fb-like')).fadeIn(150);
},
mouseleave: function () {
$(this).find($('div.tooltip')).fadeOut(150);
$(this).find($('div.fb-like')).fadeOut(150);
}
}, 'li');
しかし、これらの行を追加すると、json データの読み込みが停止します。
$('div.products ul.fullview').on({
mouseenter: function () {
$(this).find($('div.description')).show();
$(this).find($('div.fb-like')).fadeIn(150);
},
mouseleave: function () {
$(this).find($('div.description')).fadeOut(150);
$(this).find($('div.fb-like')).fadeOut(150);
}
}, 'li.highlighted');
私は何を間違っていますか?