5

次のスニペットを使用して、ユーザーがアンカーにカーソルを合わせているかどうかを Chrome/Safari & FF で判断しています。

var isURL = $("a", obj).is(":hover");

:hover が CSS セレクターであるというさまざまな投稿を見てきましたが、obj 内にリンクが 1 つある場合にコードがtrueを返し、2 つ以上ある場合はjavascript 認識されない式ホバーエラーをスローする理由がわかりません。 .

ここに :hover のフィドルがあります: - http://jsfiddle.net/2kyaJ/122/

同じだが複数の要素 (機能しない): - http://jsfiddle.net/2kyaJ/121/

誰かが私にこれを説明できますか?

ところで、これを見たことがあります...マウスがjQueryの要素の上にあるかどうかを確認するにはどうすればよいですか?

4 年経った今でも、これはユーザーが要素の上にカーソルを置いているかどうかを判断するための最善かつ一見唯一の方法ですか? はいの場合、誰かが例を提供できますか?

編集:私が必要としていたものを正確に釣りに行かなければなりませんでしたが、これは非常にうまく機能するのと同じくらい簡単です。

私は現在、親要素(obj)のマウスオーバーでアニメーションをトリガーしているjQuery 1.9.1のプラグイン内で使用しています。他の誰かが将来的に役立つことを願っています。.size はバージョン 1.8 以降では廃止されているため、.size の代わりに .length を使用してください。

        function isMouseOver() {
            if ($('a:hover', obj).length != 0) {
                return true;
            } else {
                return false;
            }                           
        }

使用法:

var isURL = isMouseOver();
4

4 に答える 4

5

:hoverhttp://api.jquery.com/で文書化されていません。そのため、特定の方法で動作するとは信じていません。問題は、コレクション内に繰り返し処理する要素が複数ある場合に、Sizzle がこの疑似セレクターによって混乱しているように思われますが、コードを見ただけではわかりません。

最初の例でも機能しているという事実はバグのようです:http: //jsfiddle.net/2kyaJ/122/-jQuery 1.9では機能しません

要素がホバーされているかどうかを確認する方法については、どのような状況でそれを行う必要があるかわかりません。代わりに、ホバーがトリガーされたときにアクションを実行することをお勧めします。mouseoverと を使用して、「ホバーのような」イベントにバインドできますmouseenter。もちろん、CSS 疑似セレクターがあり:hoverます。

于 2013-02-26T01:35:00.067 に答える
3

このフィドルhttp://jsfiddle.net/2rU4U/ を試してください:

setInterval(function(){
    var $sample = $(".sample");

    $sample.each(function(index) {
        if($(this).is(":hover")) {
           $(this).css("background", "yellow");
        }
        else {
           $(this).css("background", "");
        }
    });  
}, 200);

上記のコメントで述べたように、これは、単一の要素だけでなく、要素のコレクションが返される可能性があるという事実を考慮しています。もちろん、多くの要素でかなりのオーバーヘッドが発生する可能性があります...!

于 2013-02-26T01:31:18.337 に答える
1

なぜうまくいかないのかというと、それはバグかもしれないし、文書化されていないからかもしれません。よくわかりません。

ただし、jQuery 1.7.1、1.9、および 2.0.0b1 で動作する例を次に示します: http://jsfiddle.net/2kyaJ/125/

基本的に、 を使用する代わりに、ホバーされたすべての要素を照会してから、(ではなく).is()少なくとも 1 つの一致があることを確認できます。$(".sample:hover").length$(".sample").is(":hover")

いずれかの要素がホバーされたときにすべての要素を強調表示したいという印象を受けた.sampleので、最初の jsfiddle です。ただし、ホバーされた要素のみを強調表示したい場合は、次のようなものを試すことができます: http://jsfiddle.net/2kyaJ/126/

また、0.2秒ごとに多かれ少なかれチェックするのではなく、ホバーイベントに何かをバインドしたいだけの場合は、次の.hover()関数を使用できます: http://jsfiddle.net/2kyaJ/127/

于 2013-02-26T18:54:09.650 に答える
-2

正直なところ、間隔を設定することはひどい考えです...

ホバーリスナーを設定するだけです。

$('.sample').hover(function() {
    console.log($this) // $(this) is the currently hovered element
})

JSFiddle: http: //jsfiddle.net/jeffshaver/2kyaJ/124/

于 2013-02-26T03:08:46.157 に答える