欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS传播事件、取消事件默认行为、阻止事件传播详解

程序员文章站 2023-02-23 21:47:40
1.事件处理程序的返回值        通常情况下,返回值false就是告诉浏览器不要执行这个事件相关的默认...

1.事件处理程序的返回值 

      通常情况下,返回值false就是告诉浏览器不要执行这个事件相关的默认操作。例如,表单提交按钮的onclick事件处理程序能通过返回false阻止浏览器提交表单,再如a标签的onclick事件处理程序通过返回false阻止跳转href页面。类似地,如果用户输入不合适的字符,输入域上的onkeypress事件处理程序能通过返回false来过滤键盘输入。 
      事件处理程序的返回值只对通过属性注册的处理程序才有意义。

2.调用顺序

      文档元素或其他对象可以为指定事件类型注册多个事件处理程序。当适当的事件发生时,浏览器必须按照如下规则调用所有的事件处理程序:

通过设置对象属性或html属性注册的处理程序一直优先调用。
使用addeventlistener()注册的处理程序按照它们的注册顺序调用。
使用attachevent()注册的处理程序可能按照任何顺序调用,所以代码不应该依赖于调用顺序

3.事件传播

  在调用在目标元素上注册的事件处理函数后,大部分事件会“冒泡”到dom树根。调用目标的父元素的事件处理程序,然后调用在目标的祖父元素上注册的事件处理程序。这会一直到document对象,最后到达window对象。

  发生在文档元素上的大部分事件都会冒泡,值得注意的例外是focus、blur和scroll事件。文档元素的load事件会冒泡,但它会在document对象上停止冒泡而不会传播到window对象。只有当整个文档都加载完毕时才会触发window对象的load事件。

4.取消事件默认行为、阻止事件传播

      在支持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来实现阻止事件进一步传播。

好了以上就是小编为大家整理的全部内容啦,希望对大家有所帮助~