<ul>
最初のページが読み込まれた後に JavaScript が設定される があります。現在はと.bind
を使用しています。mouseover
mouseout
プロジェクトが jQuery 1.7 に更新されたので、 を使用するオプションがあります.on
が、 では動作しないようです。でhover
使用することは可能ですか?.on
hover
編集: バインド先の要素は、ドキュメントが読み込まれた後に JavaScript で読み込まれます。そのため、on
だけでなく を使用していますhover
。
ベストアンサー1
( JavaScript で生成された要素を使用する必要がある場合は、この回答の最後の編集を参照してください.on()
)
JavaScript を使用して設定されていない要素にはこれを使用します。
$(".selector").on("mouseover", function () {
//stuff to do on mouseover
});
.hover()
独自のハンドラーがあります:http://api.jquery.com/hover/
複数の処理を実行したい場合は、.on()
次のようにハンドラー内で連鎖させます。
$(".selector").on({
mouseenter: function () {
//stuff to do on mouse enter
},
mouseleave: function () {
//stuff to do on mouse leave
}
});
下記の回答によれば、hover
を とともに使用できます.on()
が、次の点が異なります。
新しいコードでは強く推奨されませんが、疑似イベント名「hover」が文字列「mouseenter mouseleave」の省略形として使用されているのを目にすることがあります。これは、これら 2 つのイベントに対して 1 つのイベント ハンドラをアタッチし、ハンドラは event.type を調べて、イベントが mouseenter か mouseleave かを判断する必要があります。疑似イベント名「hover」を、1 つまたは 2 つの関数を受け入れる .hover() メソッドと混同しないでください。
また、これを使用してもパフォーマンス上の利点はなく、 または だけを使用するよりも大きくなりますmouseenter
。mouseleave
私が提供した回答では、必要なコードが少なく、このようなことを実現するための適切な方法です。
編集
この質問に回答してからしばらく経ちましたが、注目を集めているようです。上記のコードはそのままですが、元の回答に何か追加したいことがあります。
私はmouseenter
とを使うことを好みますがmouseleave
(コード内で何が起こっているか理解するのに役立ちます)、.on()
それを使うと、次のように書くのと同じです。hover()
$(".selector").hover(function () {
//stuff to do on mouse enter
},
function () {
//stuff to do on mouse leave
});
元の質問では を適切に使用する方法を尋ねていたのでon()
、hover()
の使用方法を修正しようと思いましたが、その時点ではコードon()
を追加する必要はないと判断しました。hover()
2012年12月11日編集
以下で提供されているいくつかの新しい回答では、問題.on()
の が JavaScript を使用して入力された場合にどのように動作するかを詳しく説明しています。たとえば、次のようにjQuery のイベントを使用しdiv
て を入力するとします。div
.load()
(function ($) {
//append div to document body
$('<div class="selector">Test</div>').appendTo(document.body);
}(jQuery));
上記のコードは.on()
使えません。代わりに、次のようにコードを少し変更する必要があります。
$(document).on({
mouseenter: function () {
//stuff to do on mouse enter
},
mouseleave: function () {
//stuff to do on mouse leave
}
}, ".selector"); //pass the element as an argument to .on
このコードは、イベントが発生した後に JavaScript で設定された要素に対して機能します.load()
。引数を適切なセレクタに変更するだけです。
2023年1月編集
これは古いものですが、少し混乱し、ぐるぐる回っているような感じだったので、共有しようと思いました。しかし、ラッパーをターゲットにする必要があるという domsubtreemodifer ロジックを適用しました。
jQuery が時間の経過とともに変更されたかどうかはわかりませんが、ターゲットを追加するコンテナーも含める必要があります。
たとえば次のようになります。
あなたのDOMは次のようになります:
<div class="taggable">
</div>
jQueryでdivを追加すると
$('.taggable').append('<div class="close"><div>');
DOM は最終的に次のようになります。
<div class="taggable">
<div class="close"></div>
</div>
したがって、マウスイベントが機能するには、追加した要素だけでなくコンテナもターゲットにする必要があります。
$(document).on({
mouseenter: function () {
},
mouseleave: function () {
}
}, ".taggable .close");
$(function () {
$('.taggable').append('<div class="close">testme<div>');
});
$(document).on({
mouseenter: function () {
console.log('mouseenter');
},
mouseleave: function () {
console.log('mouseleave');
}
}, ".taggable .close");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="taggable">
</div>