jQuery 1.4 中新引入的事件代理(event delegation)機(jī)制,使得事件的綁定更加高效和靈活。在傳統(tǒng)的事件綁定方式下,需要為每個(gè)元素單獨(dú)綁定事件,這樣會(huì)導(dǎo)致頁面加載速度變慢、代碼冗余。而事件代理則是向祖先元素綁定事件,然后在觸發(fā)時(shí)判斷事件目標(biāo)是否為指定的子元素,如果是,則執(zhí)行回調(diào)函數(shù)。
用 jQuery 1.4 實(shí)現(xiàn)事件代理非常簡(jiǎn)單,只需要使用
.delegate()或
.on()方法即可。這兩個(gè)方法的參數(shù)都類似,第一個(gè)參數(shù)是要綁定的事件類型,第二個(gè)參數(shù)是子元素的選擇器,第三個(gè)參數(shù)是回調(diào)函數(shù)。相對(duì)而言,
.on()更加靈活,可以綁定多個(gè)事件類型。
$(document).delegate('a', 'click', function() { console.log($(this).attr('href')); }); $(document).on({ mouseenter: function() { $(this).addClass('hover'); }, mouseleave: function() { $(this).removeClass('hover'); }, click: function() { console.log($(this).text()); } }, 'li');
在上面的例子中,我們綁定了兩個(gè)事件代理。第一個(gè)是在文檔對(duì)象上監(jiān)聽所有的
a元素的點(diǎn)擊事件,輸出該元素的
href屬性。第二個(gè)是在文檔對(duì)象上監(jiān)聽所有
li元素的鼠標(biāo)進(jìn)入、離開和點(diǎn)擊事件,分別添加或刪除類名
hover,以及輸出該元素的文本內(nèi)容。
總之,jQuery 1.4 的事件代理機(jī)制是一種可以提高代碼性能和可維護(hù)性的高效方式。如果你還沒開始使用它,建議嘗試一下。