在jQuery中的自定義事件的冒泡

2024-03-22    分類: 網(wǎng)站建設(shè)

昨天的文章?tīng)可娴搅薺Query的自定義事件冒泡問(wèn)題,但只是提到?jīng)]有詳細(xì)的說(shuō)明。在jQuery中,自定義事件是會(huì)冒泡的,而且不僅是對(duì)普通的DOM元素冒泡,甚至還會(huì)擴(kuò)散到window(defaultView)上。這些機(jī)制是jQuery內(nèi)部實(shí)現(xiàn)的,和DOM的事件機(jī)制沒(méi)啥關(guān)系。 現(xiàn)在來(lái)做這么一個(gè)測(cè)試<div?class="d1"> <div?class="d2"> <div?class="d3"> div </div> </div> </div> <script?src="jquery.js"></script> <script> $(function(){ //選擇所有標(biāo)簽外加document和window來(lái)綁定上test事件 $("*").add(document).add(window).on("test",function(){ //輸出對(duì)象的構(gòu)造器名稱和className console.log(this.constructor.name,this.className||""); }); //對(duì)最內(nèi)層的div觸發(fā)test $(".d3").trigger("test"); }); </script>

這家伙厲害吧,我只對(duì)最內(nèi)層的DIV執(zhí)行了trigger就觸發(fā)了這么多個(gè)事件,這就是自定義事件冒泡。jQuery默認(rèn)對(duì)事件冒泡,只有特殊指定不冒泡時(shí)候才不會(huì)冒泡。關(guān)于這個(gè)機(jī)制的實(shí)現(xiàn)可以看jQuery的代碼(jquery-1.9.1.js 2956行到2973行)。 如果不需要冒泡怎么辦呢?在jQuery的內(nèi)部有這么一個(gè)判斷if?(?!onlyHandlers?&&?!special.noBubble?&&?!jQuery.isWindow(?elem?)?)  只有通過(guò)這個(gè)判斷時(shí)才會(huì)冒泡,最簡(jiǎn)單的方法就是讓onlyHandlers為true。這個(gè)操作jQuery有提供方法,所以只要在觸發(fā)事件時(shí)使用triggerHandler即可??$(".d3").triggerHandler("test");

本文標(biāo)題:在jQuery中的自定義事件的冒泡
URL標(biāo)題:http://www.muchs.cn/news11/321211.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google全網(wǎng)營(yíng)銷推廣、網(wǎng)站排名微信小程序、網(wǎng)站制作服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司