jQuery嵌套元素的mouseover和mouseout事件详解
今天在帮别人解决一个关于mouseover和mouseout问题的时候发现了一个原来没想到的问题,斗胆share下,高手莫喷。。
问题:有嵌套的三层div。div111最外层,div222中间层,div333最内层。
效果:当鼠标位于div的上方时,相应层的mouseover触发,当属性从div的上方离开时,相应层的mouseout触发。(比如:当鼠标从div111移动到子元素div222,div333时,不会触发div111的mouseleave事件,反过来当从子元素div222,div333到div111时,不会触发div111的mouseenter事件,
此段代码同时也解决了mouseover和mouseout由于子元素的冒泡而产生的一些问题。不知道有没更好的方案?
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> <style> #div111{ width:200px; height :200px ; background :red; margin :100px auto auto 100px; border: 2px solid white; } #div222{ width:100px; height :100px; background :yellow; border: 2px solid white; } #div333{ width:50px; height :50px; background :blue; border: 2px solid white; } </style> </head> <body> <div id="div111"> <div id="div222"> <div id="div333"></div> </div> </div> <div id="log"></div> <script type ="text/javascript" > function mouse_over(event){ var elem = $(event.currentTarget), fromElem = $(event.relatedTarget); if(elem.has(fromElem).length === 0 || !fromElem.is(elem)){ elem.css('border-color', 'green'); log(elem.attr('id'), event.type); } }; function mouse_out(event){ var elem = $(event.currentTarget), toElem = $(event.relatedTarget); if(elem.has(toElem).length === 0 || !toElem.is(elem)){ elem.css('border-color', 'white'); log(elem.attr('id'), event.type); } }; function log(id, type){ $("#log").append("<div><span>" + id + "触发了<strong><font color='red'>" + type + "</font></strong>事件</span></div>"); } $('#div111').mouseover(mouse_over); $('#div222').mouseover(mouse_over); $('#div333').mouseover(mouse_over); $('#div111').mouseout(mouse_out); $('#div222').mouseout(mouse_out); $('#div333').mouseout(mouse_out); </script> </body> </html>
jquery里面还有两个神奇的事件
一个叫做mouseenter
一个叫做mouseleave
mouseenter和mouseleave这两东西完全做不到这种效果好吧。。对于嵌套的,他们就是废柴
切,我还以为是什么大问题,直接绑定一次事件就可以,使用e.target就可以进行判断具体发生在哪个元素上,根据元素来处理更节省资源。
mouseover/out是冒泡的,所以自然会引起这问题
IE下用mouseenter/leave
其他浏览器下用addEventListener注册的时候第3个参数传true就行
IE的mouseenter/leave,当鼠标从div111移动到div222的时候,会触发div111的mouseleave和div222的mouseenter,反过来当从div222到div111的时候,会触发div222的mouseleave和div111的mouseenter,完全就不符合要求,他们只适合没有嵌套的应用。
其他浏览器的捕获模式,实现这种效果不会比冒泡模式简单,而且还不兼容IE。。
但是mouseenter和mouseleave就是为解决这个问题才产生的。YUI中也有,可以处理嵌套的冒泡。
jquery的不好用?!
好不好用看场合,个人认为
$().mouseenter(function(){ //do something });
和
$().mouseover(function(event){ if(!$(this).data('mouseover').mouseover){ $(this).data('mouseover', {mouseover: true}); //do something } event.stopPropagation(); });
没区别
Atas ialah kandungan terperinci jQuery嵌套元素的mouseover和mouseout事件详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Penjelasan terperinci kaedah rujukan jQuery: Panduan Mula Pantas jQuery ialah perpustakaan JavaScript yang popular yang digunakan secara meluas dalam pembangunan tapak web Ia memudahkan pengaturcaraan JavaScript dan menyediakan pemaju dengan fungsi dan ciri yang kaya. Artikel ini akan memperkenalkan kaedah rujukan jQuery secara terperinci dan menyediakan contoh kod khusus untuk membantu pembaca bermula dengan cepat. Memperkenalkan jQuery Pertama, kita perlu memperkenalkan perpustakaan jQuery ke dalam fail HTML. Ia boleh diperkenalkan melalui pautan CDN atau dimuat turun

Bagaimana untuk menggunakan kaedah permintaan PUT dalam jQuery? Dalam jQuery, kaedah menghantar permintaan PUT adalah serupa dengan menghantar jenis permintaan lain, tetapi anda perlu memberi perhatian kepada beberapa butiran dan tetapan parameter. Permintaan PUT biasanya digunakan untuk mengemas kini sumber, seperti mengemas kini data dalam pangkalan data atau mengemas kini fail pada pelayan. Berikut ialah contoh kod khusus menggunakan kaedah permintaan PUT dalam jQuery. Mula-mula, pastikan anda memasukkan fail perpustakaan jQuery, kemudian anda boleh menghantar permintaan PUT melalui: $.ajax({u

Bagaimana untuk mengalih keluar atribut ketinggian elemen dengan jQuery? Dalam pembangunan bahagian hadapan, kita sering menghadapi keperluan untuk memanipulasi atribut ketinggian elemen. Kadangkala, kita mungkin perlu menukar ketinggian unsur secara dinamik, dan kadangkala kita perlu mengalih keluar atribut ketinggian unsur. Artikel ini akan memperkenalkan cara menggunakan jQuery untuk mengalih keluar atribut ketinggian elemen dan memberikan contoh kod khusus. Sebelum menggunakan jQuery untuk mengendalikan atribut ketinggian, kita perlu terlebih dahulu memahami atribut ketinggian dalam CSS. Atribut ketinggian digunakan untuk menetapkan ketinggian elemen

jQuery ialah perpustakaan JavaScript yang pantas, kecil dan kaya dengan ciri yang digunakan secara meluas dalam pembangunan bahagian hadapan. Sejak dikeluarkan pada tahun 2006, jQuery telah menjadi salah satu alat pilihan untuk banyak pembangun, tetapi dalam aplikasi praktikal, ia juga mempunyai beberapa kelebihan dan kekurangan. Artikel ini akan menyediakan analisis mendalam tentang kelebihan dan kekurangan jQuery dan menggambarkannya dengan contoh kod khusus. Kelebihan: 1. Sintaks ringkas Reka bentuk sintaks jQuery adalah ringkas dan jelas, yang boleh meningkatkan kebolehbacaan dan kecekapan menulis kod. sebagai contoh,

Tajuk: Petua jQuery: Cepat ubah suai teks semua teg pada halaman Dalam pembangunan web, kita selalunya perlu mengubah suai dan mengendalikan elemen pada halaman. Apabila menggunakan jQuery, kadangkala anda perlu mengubah suai kandungan teks semua teg dalam halaman sekaligus, yang boleh menjimatkan masa dan tenaga. Berikut akan memperkenalkan cara menggunakan jQuery untuk mengubah suai teks semua teg pada halaman dengan cepat, dan memberikan contoh kod khusus. Pertama, kita perlu memperkenalkan fail perpustakaan jQuery dan memastikan bahawa kod berikut dimasukkan ke dalam halaman: <

Tajuk: Gunakan jQuery untuk mengubah suai kandungan teks semua teg jQuery ialah perpustakaan JavaScript yang popular yang digunakan secara meluas untuk mengendalikan operasi DOM. Dalam pembangunan web, kita sering menghadapi keperluan untuk mengubah suai kandungan teks tag pautan (tag) pada halaman. Artikel ini akan menerangkan cara menggunakan jQuery untuk mencapai matlamat ini dan memberikan contoh kod khusus. Pertama, kita perlu memperkenalkan perpustakaan jQuery ke dalam halaman. Tambahkan kod berikut dalam fail HTML:

Bagaimana untuk mengetahui sama ada elemen jQuery mempunyai atribut tertentu? Apabila menggunakan jQuery untuk mengendalikan elemen DOM, anda sering menghadapi situasi di mana anda perlu menentukan sama ada sesuatu elemen mempunyai atribut tertentu. Dalam kes ini, kita boleh melaksanakan fungsi ini dengan mudah dengan bantuan kaedah yang disediakan oleh jQuery. Berikut akan memperkenalkan dua kaedah yang biasa digunakan untuk menentukan sama ada elemen jQuery mempunyai atribut khusus, dan melampirkan contoh kod tertentu. Kaedah 1: Gunakan kaedah attr() dan operator jenis // untuk menentukan sama ada elemen mempunyai atribut tertentu

jQuery ialah perpustakaan JavaScript popular yang digunakan secara meluas untuk mengendalikan manipulasi DOM dan pengendalian acara dalam halaman web. Dalam jQuery, kaedah eq() digunakan untuk memilih elemen pada kedudukan indeks tertentu Senario penggunaan dan aplikasi khusus adalah seperti berikut. Dalam jQuery, kaedah eq() memilih elemen pada kedudukan indeks yang ditentukan. Kedudukan indeks mula dikira dari 0, iaitu indeks elemen pertama ialah 0, indeks elemen kedua ialah 1, dan seterusnya. Sintaks kaedah eq() adalah seperti berikut: $("s
