事件代理在JS世界中一個非常有用也很有趣的功能。當我們需要對很多元素添加事件的時候,可以通過將事件添加到它們的父節(jié)點而將事件委托給父節(jié)點來觸發(fā)處理函數(shù)。
例如:
我們對對臺添加的某個元素添加點擊事件,動態(tài)添加的onclick事件必須要在append追加完元素之后添加進去才管用。但是有些有些事件,不僅僅是onclick事件就可以解決的,如果在onclick事件中還有$('.normal').each(function(){ })等之類的循環(huán),那么我們單純的靠onclick則解決不了,因為onclick你定位不到具體的某個類的元素上
開始我是這樣寫的:
動態(tài)生成的元素中寫了onclick事件,js中
function aa(){
$('.normal').each(function(){
var _this=$(this);
console.log('操作你的代碼');
})
}
我發(fā)現(xiàn)會輸出兩次到控制臺
那么用事件代理就不會出現(xiàn)這些問題,他的原理是找一個不是動態(tài)添加的已有元素添加代理
如下我是給class="newshop"加的代理
給exchangeId添加的點擊事件
$('.newshop').click(function (ev) {//.exchangId
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
if (target.nodeName.toLowerCase() == 'p') {
if ($(target).parent('dd').hasClass('exchangId')) {
var add = $(target);
......
}
}
});