亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript中的事件代理初探

2019-11-20 20:58:25
字體:
來源:轉載
供稿:網友

事件在javascript中一直是最強大的對象之一。javascript提供了addEventListener和attachEvent兩個方法來為DOM節點綁定事件,jquery作了進一步封裝,提供了兼容各個瀏覽器的bind方法?,F在來看,這種傳統的事件綁定方式存在著以下不足:

1.可能需要綁定很多的EventHander。

假如頁面中某個表有100行,現在必須為每一行綁定一個click事件。那么就必須綁定100個EventHandler,這對頁面性能來說有著極大的負擔,因為需要創建更多的內存來存放這些Handler。

2.事件無法綁定后加入的DOM節點。

假如頁面中的代碼如下:

復制代碼 代碼如下:

$("#dv").bind('click',function(){alert('test');});
$(body).append('<div id="dv">test</div>')

后加入的div是無法觸發點擊事件的。

為了解決這兩個問題,javascript引入了事件代理(event proxy)。首先,我們了解一下js中的冒泡機制。


基本上所有的瀏覽器都支持事件冒泡。當在某個DOM節點上觸發事件上,事件會一直向上傳遞,一直到文檔的根節點。既然所有的節點的事件最終都會傳遞到文檔根節點,那么我們如果直接將事件綁定到文檔根節點(document節點),然后通過event.target來判斷是哪個節點觸發的事件,是不是減少很多EventHandler的綁定呢?

jquery中的live方法正式根據這個原理來實現的,下面我們來實現一個live簡單版:

復制代碼 代碼如下:

$.fn.mylive=function(eventType,fn){
 var that=this.selector;
 $(document).bind(eventType,function(event){
  var match=$(event.target).closest(that)
  if(match.length !== 0){
   fn.apply($(event.target),[event]);
  }
 })
}

$("#tb td").mylive('click',function(event){
 alert(event.target.innerHTML);
});

var tb='<table id="tb"> /
  <tr> /
   <td>the first column</td>/
   <td>the second column</td>/
   <td>the third column</td>/
  </tr>/
</table>';
$("body").append(tb);


live方法中,事件綁定在document節點上,$(event.target).closest(that)來匹配真正觸發事件的元素。demo中,我們為每個后加入的td都綁定了click事件,單擊不同的td,我們發現會彈出他們對應Text的提示框。

live方法彌補了前面提到的傳統事件綁定方法的兩個不足。但live方法仍存在它的不足之處??催@句代碼:

復制代碼 代碼如下:

$("#tb td").mylive('click',function(event){
 alert(event.target.innerHTML);
});

它會首先根據jquery選擇器遍歷整個文檔,找到所有的#tb td元素,將他們存儲成對象。然而,在live的實現方法中,并沒有利用這些對象,而僅僅是將"#td td"作為字符串與事件源進行匹配而已。這就大大增加了很多無謂的消耗。

那么有沒有辦法改善這一狀況呢?jquery中提供了delegate代理方法,它支持將事件綁定到指定的元素上,而不僅僅是document上。了解了它的原理,我們來實現一個delegate簡單版:

復制代碼 代碼如下:

$(body).append('<div id="dv"></div>');

$.fn.mydelegate=function(selector,eventType,fn){
 $(this).bind(eventType,function(event){
  var match=$(event.target).closest(selector);
  if(match.length !== 0){
   fn.apply($(event.target),[event]);
  }
 });
}

$("#dv").mydelegate('td','click',function(event){
 alert(event.target.innerHTML);
});

var tb='<table id="tb"> /
  <tr> /
   <td>the first column</td>/
   <td>the second column</td>/
   <td>the third column</td>/
  </tr>/
</table>';
$("dv").append(tb);


mydeletage方法不需要獲取所有的td對象,而僅僅只需要獲取綁定事件的div對象。這在執行效率上要優于live方法。

這里僅僅起到一個拋磚引玉的作用,讓大家了解到事件代理的原理而已,jquery中的live和delegate實現要復雜的多。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产91久久久久久最新| 精品亚洲va在线va天堂资源站| 97国产suv精品一区二区62| 午夜精品久久久久久久白皮肤| 91成人性视频| 97久久超碰福利国产精品…| 69影院欧美专区视频| 尤物tv国产一区| 久久国产精品视频| 欧美一级视频免费在线观看| 欧美精品久久久久久久| 久国内精品在线| 亚洲国产私拍精品国模在线观看| 久久综合国产精品台湾中文娱乐网| 久久香蕉国产线看观看av| 亚洲午夜未删减在线观看| 韩剧1988免费观看全集| 欧美色播在线播放| 国产精品露脸av在线| 尤物九九久久国产精品的分类| 久久视频在线观看免费| 日韩av最新在线| 国产成人精品一区| 国产精品久久久91| 欧美色图在线视频| 国语自产精品视频在线看抢先版图片| 91嫩草在线视频| 国产精品三级网站| 日韩精品在线观看一区| 国产日韩av高清| 亚洲国产古装精品网站| 国产精品一区二区久久国产| 欧美日韩国产色视频| 欧美在线视频在线播放完整版免费观看| 中文字幕在线看视频国产欧美| 欧美成人免费一级人片100| 欧美中文字幕视频| 欧美日韩第一页| 日韩高清中文字幕| 日韩高清免费在线| 亚洲日本欧美日韩高观看| 91九色国产视频| 97超级碰在线看视频免费在线看| 91国产精品视频在线| 在线观看亚洲视频| 韩国日本不卡在线| 日韩天堂在线视频| 亚洲r级在线观看| 日韩中文字幕在线观看| 亚洲精品福利免费在线观看| 精品久久久视频| 国产精品日韩专区| 国产美女直播视频一区| 精品亚洲一区二区三区在线观看| 中文字幕日韩精品在线| 国产精品久久久久免费a∨| 91精品国产自产在线老师啪| 国产在线精品播放| 精品日韩视频在线观看| 亚洲欧美一区二区激情| 国产精品久久久999| 91精品久久久久久久久久久| 91网站在线免费观看| 国模吧一区二区| 国产精品久久久久999| 97碰碰碰免费色视频| 精品国产乱码久久久久久虫虫漫画| 久久久久久久91| 91啪国产在线| 日韩精品有码在线观看| 韩国国内大量揄拍精品视频| 国产精品亚洲自拍| 亚洲国产欧美一区| 国产精品国产三级国产aⅴ9色| 91免费的视频在线播放| 中文字幕欧美精品日韩中文字幕| 美女精品视频一区| 91亚洲精品一区| 日韩男女性生活视频| 日韩中文字幕国产| 日日狠狠久久偷偷四色综合免费| 精品久久久免费| 在线日韩中文字幕| 亚洲成人网久久久| 欧美理论片在线观看| 国产日韩精品综合网站| 久久九九热免费视频| 国产欧美精品一区二区三区介绍| 欧美美最猛性xxxxxx| 欧美一级视频一区二区| 亚洲在线免费看| 欧美视频在线观看 亚洲欧| 久久久精品电影| 国产精品久久久久久中文字| 欧美另类极品videosbestfree| 精品国产乱码久久久久酒店| 久久精品国产96久久久香蕉| 日韩精品中文字幕在线观看| 久久久久久久久久国产精品| 正在播放亚洲1区| 欧美亚洲第一页| 成人免费看吃奶视频网站| 日韩a**中文字幕| 国产a级全部精品| 国内免费精品永久在线视频| 欧美激情在线观看| 欧美激情一二区| 亚洲va国产va天堂va久久| 亚洲白虎美女被爆操| 亚洲天堂日韩电影| 欧美日韩亚洲一区二| 国产脚交av在线一区二区| 亚洲裸体xxxx| 欧美成人午夜激情在线| 亚洲深夜福利在线| 国产日韩欧美在线视频观看| 亚洲美女又黄又爽在线观看| 亚洲成人精品视频在线观看| 国产精品网址在线| 性视频1819p久久| 欧美黑人极品猛少妇色xxxxx| 国产suv精品一区二区| 久久久久久久一区二区三区| 91精品国产九九九久久久亚洲| 国产91色在线|| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美日韩成人网| 日韩视频免费在线| 国产精品成久久久久三级| 久久偷看各类女兵18女厕嘘嘘| 日韩精品久久久久久福利| 成人在线精品视频| 91综合免费在线| 亚洲天堂av电影| 91亚洲国产成人久久精品网站| 久久成人精品视频| 亚洲久久久久久久久久久| 欧美大尺度激情区在线播放| 91精品啪在线观看麻豆免费| 色香阁99久久精品久久久| 亚洲人成伊人成综合网久久久| 中文字幕av一区中文字幕天堂| 国产午夜精品全部视频在线播放| 欧美最顶级丰满的aⅴ艳星| 精品国产一区二区三区久久久| 成人啪啪免费看| 精品夜色国产国偷在线| 亚洲美女av在线| 日韩在线观看免费网站| 九九视频这里只有精品| 亚洲美女视频网| 国产欧美日韩91| 国产精品欧美日韩久久| 亚洲精品美女久久| 全色精品综合影院| 久久精品国产亚洲一区二区| 日韩不卡在线观看| 久久精品国产亚洲精品2020| 成人在线激情视频| 欧美最猛性xxxxx(亚洲精品)| 国产69精品久久久久9| 中文日韩在线视频| 国模极品一区二区三区| 国产成人av网|