jQuery で要素の上にマウスを置いたときに IF を検出する 質問する

jQuery で要素の上にマウスを置いたときに IF を検出する 質問する

呼び出すアクションを探しているわけではないいつホバリングではなく、伝える方法もし現在マウスが置かれている要素。例:

$('#elem').mouseIsOver(); // returns true or false

これを実現する jQuery メソッドはありますか?

ベストアンサー1

元の(そして正しい)答え:

is()セレクターを使用して確認できます:hover

var isHovered = $('#elem').is(":hover"); // returns true or false

例:http://jsfiddle.net/Meligy/2kyaJ/3/

(これはセレクターが最大 1 つの要素に一致する場合にのみ機能します。詳細については編集 3 を参照してください)

編集1(2013年6月29日):(jQuery 1.9.x のみに適用可能。1.10 以降でも動作します。次の編集 2 を参照してください)

この回答は、質問が回答された時点では最善の解決策でした。この ':hover' セレクターは、.hover()jQuery 1.9.x でのメソッド削除とともに削除されました。

:hover興味深いことに、「allicarn」による最近の回答では、セレクターをプレフィックスとして付けると、CSS セレクター (Sizzle ではなく) として使用できることが示されており$($(this).selector + ":hover").length > 0、動作するようです。

また、ホバーインテント別の回答で言及されているプラ​​グインも非常に良さそうです。

編集2(2013年9月21日): .is(":hover") 作品

別のコメントに基づいて、私が投稿した元の方法、は実際には jQuery でもまだ機能することに気付きました.is(":hover")

  1. jQuery 1.7.x では動作しました。

  2. hover誰かが私に報告したところ、1.9.1 で動作しなくなりました。私たちは皆、そのバージョンで jQuery がイベント処理のエイリアスを削除したことが原因だと考えました。

  3. これは jQuery 1.10.1 および 2.0.2 (おそらく 2.0.x) でも再び動作しました。これは、1.9.x での失敗はバグであったか、前のポイントで考えていたような意図的な動作ではなかったことを示唆しています。

特定の jQuery バージョンでこれをテストする場合は、この回答の冒頭にある JSFidle の例を開き、目的の jQuery バージョンに変更して [実行] をクリックします。マウスをホバーしたときに色が変わる場合は、正常に動作しています。

編集3(2014年3月9日):jQueryシーケンスに要素が1つだけ含まれている場合にのみ機能します。

@Wilmer がコメントで示しているように、彼のフィドルは、私や他の人がテストした jQuery バージョンに対してさえ機能しません。彼のケースの何が特別なのかを見つけようとしたとき、彼が一度に複数の要素をチェックしようとしていることに気付きました。これは をスローしていましたUncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover

だから、彼のバイオリンで作業すると、ない仕事:

var isHovered = !!$('#up, #down').filter(":hover").length;

このする仕事:

var isHovered = !!$('#up,#down').
                    filter(function() { return $(this).is(":hover"); }).length;

また、元のセレクターが 1 つの要素のみに一致した場合や、.first()結果を呼び出した場合など、単一の要素を含む jQuery シーケンスでも機能します。

これは私のJavaScript + Web 開発のヒントとリソースのニュースレター

おすすめ記事