jQuery中on方法使用注意事項(xiàng)詳解
on(eventType,[childSelector],[data],fn)
采用事件委托機(jī)制綁定事件,好處是子元素動(dòng)態(tài)加入時(shí)無(wú)需再次綁定。
on方法可以傳入childSelector指定添加事件處理函數(shù)的具體子元素,還可以傳入對(duì)象格式的數(shù)據(jù)data,fn函數(shù)內(nèi)部通過(guò)event.data.XXX獲取具體參數(shù)。傳入事件處理函數(shù)的data需要在事件綁定時(shí)就確定好,不同于trigger('eventType',[data]),tirgger方法中傳入的data(對(duì)象或數(shù)組形式)是事件發(fā)生時(shí)才計(jì)算的值。
如果同一個(gè)事件處理程序被多次綁定給同一個(gè)元素,觸發(fā)時(shí)就會(huì)執(zhí)行多遍。所以綁定之前,需要先解綁之前的相同事件:
$(“selector”).off("click.xxx").on('click.xxx',function(){…});
如要在同一個(gè)元素上綁定不同事件處理函數(shù),可以用事件的命名空間加以區(qū)分:click.forSpan、click.forDiv。
delegate()的源碼是調(diào)用on()方法,只不過(guò)參數(shù)順序變了,所以統(tǒng)一用on()。
事件觸發(fā)順序:
target是觸發(fā)事件的元素,不會(huì)變;currentTarget是事件處理函數(shù)當(dāng)前所在的元素,會(huì)動(dòng)態(tài)變化;delegateTarget是事件處理函數(shù)綁定的對(duì)象,不會(huì)變。
on方法利用了事件冒泡機(jī)制,事件會(huì)從事件源一直冒泡傳遞到document,并觸發(fā)相應(yīng)元素的事件處理函數(shù)(若有)。
事件處理隊(duì)列:從觸發(fā)事件的元素開(kāi)始,遍歷至delegateTarget,查找childSelector所指定的元素節(jié)點(diǎn),并在事件處理隊(duì)列handlerQueue中壓入事件處理函數(shù),最后將delegateTarget元素直接綁定的事件處理也壓入隊(duì)列(委托事件先于直接綁定的)。
on方法的冒泡過(guò)程中,具有事件處理函數(shù)的是delegateTarget元素而不是childSelector元素。
$("div").on('click','span',function(event){ alert("The span element was clicked."); }); $("p").click(function(event){ alert("The p element was clicked."); }); $("div").click(function(){ alert("The div element was clicked."); });
點(diǎn)擊span元素時(shí),span元素上沒(méi)有綁定事件處理函數(shù),冒泡傳遞到P元素,P元素有直接綁定的事件處理函數(shù),最先彈出P;然后傳遞到最外層div元素,div元素有事件委托,jQuery會(huì)從target (span)遍歷到delegateTarget (div),查找childSelector節(jié)點(diǎn),并壓入事件處理隊(duì)列中。最后壓入delegateTarget (div)元素直接綁定的事件處理函數(shù)。所以會(huì)彈出Span后彈出Div。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
jQuery中的一些常見(jiàn)方法小結(jié)(推薦)
下面小編就為大家?guī)?lái)一篇jQuery中的一些常見(jiàn)方法小結(jié)(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06jquery 之 $().hover(func1, funct2)使用方法
.hover(func1, func2) 的效果等效于: mouseenter(), mouseleave()2012-06-06編寫(xiě)高效jQuery代碼的4個(gè)原則和5個(gè)技巧
有了JQuery對(duì)JS的整合和封裝,它讓頁(yè)面操作更加的隨心所欲,所以只有遵循良好的規(guī)范才會(huì)讓代碼更高效,更健壯。以下是我對(duì)如何高效操作JQuery的一些拙見(jiàn),望指正!2014-04-04Jquery實(shí)現(xiàn)側(cè)邊欄跟隨滾動(dòng)條固定(兼容IE6)
側(cè)邊欄隨滾動(dòng)條上下滾動(dòng),始終固定在一個(gè)位置的功能,現(xiàn)在很多網(wǎng)站和博客都有這個(gè)功能2014-04-04jquery 重寫(xiě) ajax提交并判斷權(quán)限后 使用load方法報(bào)錯(cuò)解決方法
這篇文章主要介紹了jquery 重寫(xiě) ajax提交并判斷權(quán)限后 使用load方法報(bào)錯(cuò)解決方法 的相關(guān)資料,需要的朋友可以參考下2016-01-01通過(guò)jquery的$.getJSON做一個(gè)跨域ajax請(qǐng)求試驗(yàn)
jquery提供了$.getJSON的方法,讓我們可以實(shí)現(xiàn)跨域ajax請(qǐng)求,但jqueryAPI上的內(nèi)容實(shí)在太少,如何用$.getJSON,請(qǐng)求網(wǎng)站應(yīng)該返回怎樣的數(shù)據(jù)庫(kù)才能讓$.getJSON獲取到,下面我就用一個(gè)實(shí)際例子來(lái)說(shuō)明下。2011-05-05jQuery使用animate創(chuàng)建動(dòng)畫(huà)用法實(shí)例
這篇文章主要介紹了jQuery使用animate創(chuàng)建動(dòng)畫(huà)用法,可實(shí)現(xiàn)點(diǎn)擊鏈接文字隱藏及顯示文字的功能,實(shí)例分析了jquery中toggle與animate方法的使用技巧,需要的朋友可以參考下2015-08-08