js事件机制总结

225 阅读1分钟

事件流:描述从页面中接收事件的顺序。

事件冒泡:事件先在被触发的元素上发生,然后,事件沿着DOM树向上传播,在每一级节点上都会发生,直至传播到document对象。

事件捕获:事件先在document上被触发,然后事件沿着DOM树以次向下,一直传播到事件的实际目标。

事件捕获/冒泡,通过addEventListener的第三个参数useCapture(Boolean)-默认flase设置,true代表捕获,false代表冒泡。


事件代理:利用事件冒泡机制,在父元素DOM上设置代理事件,子元素触发之时,用代理事件的默认参数:e,来获取究竟是哪一个元素触发了这个事件。


一些注意点:

e的常用属性:target,这个就是触发该事件的DOM。

target:target.parentNode可以得到这个DOM的父级DOM,但是肯定是不能得到子级DOM的(笑)

var oUl = document.getElementById("ul1");
  oUl.onclick = function(ev){
    var ev = ev || window.event;    //分别支持ff和ie,其余浏览器两种方法都可以
    var target = ev.target || ev.srcElement;    //注释1
    if(target.nodeName.toLowerCase() == 'li'){    //应该有个注释,但是我懂
          alert(123);
        alert(target.innerHTML);
    }
  }
}

注释1:ff下,只有target;ie下,只有srcElement属性,但这两个属性的作用相当。


最后给一个,先发生事件捕获,再发生事件冒泡。