他の貢献者は、インライン カラーの代わりにクラスを使用する必要があることを正しく指摘しましたが、MHZ が言い続けているように、これは必要な機能のすべてではありません。ホバーの問題は、可視性をテストしようとする方法が正しくないことです。可視性の元のテストを検討してください。
if($(".webpopup,.phonepopup").is(":hidden")){
$("tr").hover(function(){
$(this).toggleClass('fresh');
});
}
if 関数は常に true になります。次に、常に true であるため、ホバー イベントが作成されます。これは、ドキュメントのロード時に 1 回発生します。次に、このイベントリスナーに行き詰まります。
代わりに、MHZ、次のようなものが必要だと思います。
theyAreVisible = function() {
var shown = $('.webpopup,.phonepopup').map(function() {
return $(this).is(':visible') ? true : null;
});
return shown.length > 0 ? true : false;
};
$("tr").hover(function() {
if (!theyAreVisible()) $(this).addClass('fresh');
}, function() {
if (!theyAreVisible()) $(this).removeClass('fresh');
});
このようにして、ポップアップのいずれかが開いているかどうかを確認する 1 つのホバー イベント ハンドラーができます。map 関数はそれぞれをループし、開いている個体があるかどうかを調べ、見つかった場合は true を返します。ただし、if([]) は true として解決されるため、この結果をそのまま返すことはできません。検討:
if ([]) { console.log('yup!'); }
取り除く:
- 常にイベント ハンドラー内でチェックを行います (この場合はトグル)。
- あなたが真実として解決していると思うことが、実際に真実として解決されていることを確認してください。