js事件传播流程,事件阻止以及事件流的三个过程

一、事件传播

在调用在目标元素上注册的事件处理函数后,大部分事件会“冒泡”到DOM树根。调用目标的父元素的事件处理程序,然后调用在目标的祖父元素上注册的事件处理程序。这会一直到Document对象,最后到达Window对象。
  发生在文档元素上的大部分事件都会冒泡,值得注意的例外是focus、blur和scroll事件。文档元素的load事件会冒泡,但它会在Document对象上停止冒泡而不会传播到Window对象。只有当整个文档都加载完毕时才会触发Window对象的load事件。

二、事件阻止

1.取消事件默认行为、阻止事件传播
   在支持addEventListener()的浏览器中,可以通过调用事件对象的preventDefault()方法取消事件的默认操作。IE9之前的IE中,可以通过设置事件对象的returnValue属性为false达到同样的效果。下面一段代码是结合三种技术取消事件:

function cancelHandler(event){
    			 var event=event||window.event;//兼容IE
    			 //取消事件相关的默认行为
    			 if(event.preventDefault) //标准技术
    			 event.preventDefault();
    			 if(event.returnValue) //兼容IE9之前的IE
    			 event.returnValue=false;
    			 return false; //用于处理使用对象属性注册的处理程序
    			}

取消事件相关的默认操作只是事件取消中的一种,我们也能取消事件传播。在支持addEventListener()的浏览器中,可以调用事件对象的stopPropagation()方法以阻止事件的继续传播。如果在同一对象上定义了其他处理程序,剩下的处理程序将依旧被调用,但调用stopPropagation()之后任何其他对象上的事件处理程序将不会被调用。

IE9之前的IE不支持stopPropagation()方法,而是设置事件对象cancelBubble属性为true来实现阻止事件进一步传播。

三、事件流的三个过程

1.事件捕获阶段
2.处于目标阶段
3.事件冒泡阶段

你可能感兴趣的:(前端)