// DOM0级事件模型是早期的事件模型,所有的浏览器都是支持的
// dom0中,一个dom对象只能注册一个同类型的函数,因为注册多个同类型的函数的话,就会发生覆盖,之前注册的函数就会无效。
// 在DOM2级中使用addEventListener和removeEventListener来注册和解除事件(IE8及之前版本不支持)。
// 这种函数较之之前的方法好处是一个dom对象可以注册多个相同类型的事件,不会发生事件的覆盖,会依次的执行各个事件函数。
// 首先我们要知道addEventListenr的第一个参数是事件名称,与DOM0级不同的是没有”on“,另外第三个参数代表捕获还是冒泡,true代表捕获事件,false代表冒泡事件。
// 正常的情况下,我们在不添加stopPropagation函数时,首先应该执行inner,然后执行outer,但是当我们在inner的事件函数中添加了stopPropagation函数之后,
// 执行完inner的事件函数之后,就不会在执行outer的事件函数了,也可以理解为事件冒泡到inner之后就消失了,因此也就不会在执行接下来的事件函数了。
// 由于事件捕获阶段没有可以阻止事件的函数,所以一般都是设置为事件冒泡。
// 事件流:从页面中接收事件的顺序。也就是说当一个事件产生时,这个事件的传播过程,就是事件流。
// IE中的事件流叫事件冒泡;事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档)。
// 对于html来说,就是当一个元素产生了一个事件,它会把这个事件传递给它的父元素,父元素接收到了之后,还要继续传递给它的上一级元素,
// 就这样一直传播到document对象(亲测现在的浏览器到window对象,只有IE8及下不这样
// 事件捕获是不太具体的元素应该更早接受到事件,而最具体的节点应该最后接收到事件。他们的用意是在事件到达目标之前就捕获它;
// 也就是跟冒泡的过程正好相反,以html的click事件为例,document对象(DOM级规范要求从document开始传播,
// 但是现在的浏览器是从window对象开始的)最先接收到click事件的然后事件沿着DOM树依次向下传播,一直传播到事件的实际目标;
// 标准浏览器中
// ele.addEventListener('click',function(){},false// true就是事件捕获)
// IE中:不支持事件捕获ele.attachEvent ('onclick',function(){});
// 事件冒泡1,子元素的事件会向上传播,传播到父元素身上。
// ele.addEventListener('click',function(){},false//false就是事件冒泡)
// 如何取消事件冒泡:
// 标准浏览器:e.stopPropagation;
// IE:window.event.cancelBubble=true;
// 从里往外来 false,浏览器的默认行为,直到document为止
// 利用事件冒泡,解决后生成元素的事件绑定问题,叫做事件委托或者事件代理。
// 不是所有的事件都能冒泡,例如:blur、focus、load、unload
// 添加事件监听:
// 标准浏览器: 3个参数
// addEventListener(事件类型click,事件处理function( e ) {
// e.stopPropagation(); //阻止事件传播,点击子元素就不会冒泡到父元素上了
// }, // 事件冒泡false/ 事件捕获true );
// IE:2个参数,不支持第3个参数,只能是事件冒泡
// attachEvent(事件类型onclick , 事件处理函数function(){
// window.event.cancelBubble = true; // 阻止事件传播,点击子元素就不会冒泡到父元素上了
// } ) ;
// 移除事件监听:
// 标准浏览器:removeEventListener(事件类型 , 事件处理函数 , false );
// IE:detachEvent(事件类型,事件处理函数);