jQueryで、on()にclickとhoverを設定して、同じ処理をしたい【jQuery】


jqueryで、メニューアイコンをクリックした時にメニュー画面をヌルっと表示させるようにしていたのだけど、クリックがめんどくさいのでマウスをホバーした時も同じようにヌルっと表示させるようにしようとした。

 

そしたら落とし穴にハマった!(汗)

 

毎回、すごく安易に陥りやすくて、確か以前も時間を取られた気がするからメモしておく。

なお、on()に限らず、bind()やlive()でも同じ現象が発生する模様。

 

まず、こちら。↓

NGパターン(動作しない)

$("#test").on('click hover', function() {
		// クリックやマウスが乗っかった時の処理
	});

ブラウザで動作確認をしてみると・・・、動かない!(怒)

「.on('click hover'~」って、ちゃんと設定しているのに!!

 

 

OKパターン(正解はこちら。)

$("#test").on('click mouseenter', function() {
		// クリックやマウスが乗っかった時の処理
	});

hoverじゃなくて、「mouseenter」が正解でした。

ちなみに「mouseover」でもイケる。

(厳密に言うと、mouseoverとmouseenterでは挙動が違う場面もある。要素が入れ子の場合などで。)

 

on()では「hover」イベントは使えないそうです。公式ページでの詳細説明
(注: .hover()は従来通り使える。)

 

 

なお、スマホでは、これだけでは上手く動作しない模様。

その件については、別記事に書いてます。
こちらからどうぞ。 ↓
jQueryで、on()にclickとtouchstartを併記したら、スマホでのタップイベントの動作がおかしくなった