事件流:描述从页面中接收事件的顺序 冒泡 捕获
IE提出的 事件冒泡流 (Event Bubbling)
Netscape 网景 事件捕获流 (Event Capturing)
事件流:事件捕获阶段、处于目标阶段、事件冒泡阶段
事件对象 事件触发后的详细信息 里面有一个target srcElement 火狐只有target IE只有scrElment 谷歌两个都有
var target = e.target || e.srcElement;
事件代理,把原本要绑定的事件绑定到父元素上,原理是事件冒泡
var oUl = document.getElementsByTagName('ul')[0];
oUl.onclick = function(e){
var e = e || window.event,
target = e.target || e.srcElement;
console.log(target, target.innerText);
}
事件代理如何拿下标
循环
oUl.onclick = function(e){
var e = e || window.event,
target = e.target || e.srcElement;
console.log(target, target.innerText);
// 循环
for(var i = 0; i < len; i++){
item = oLi[i];
if(target === item ){
console.log('下标',i);
}
}
}
通过Array.prototype.indexOf(),一般都是使用这种方法
var oUl = document.getElementsByTagName('ul')[0],
oLi = oUl.getElementsByTagName('li'),
len = oLi.length,
item;
oUl.onclick = function(e){
var e = e || window.event,
target = e.target || e.srcElement;
console.log(target, target.innerText);
// // 循环
// for(var i = 0; i < len; i++){
// item = oLi[i];
// if(target === item ){
// console.log('下标',i);
// }
// }
// Array.prototype.indexOf()
// 类数组不能直接调用这个方法 所以要借用call改变this指向
Array.prototype.indexOf.call(oLi, target);
}
事件代理主要解决,多次重复的绑定事件处理函数
事件对象和事件源对象是事件代理的核心