javascript中的事件

        在javascript中的事件有三个方面的知识,一是事件流,二是事件处理程序,三是事件对象。下面就我个人的一点理解,分别讲述一下这三个方面的内容。


        第一、事件流

                事件流指的是事件按照一定的顺序触发。它有两个顺序,分别是自上而下和自下而上。

                自上而下的叫做事件捕获,事件捕获指的是事件的处理将从DOM层次的根开始,而不是从触发事件的目标元素开始,事件被从目标元素的所有祖先元素依次往下传递。在这个过程中,事件会被从文档根到事件目标元素之间各个继承派生的元素所捕获,如果事件监听器在被注册时设置了useCapture属性为true,那么它们可以被分派给这期间的任何元素以对事件做出处理;否则,事件会被接着传递给派生元素路径上的下一元素,直至目标元素。事件到达目标元素后,它会接着通过DOM节点再进行冒泡。

                自下而上的叫做事件冒泡,当事件在某一DOM元素被触发时,例如用户在客户名字节点上点击鼠标,事件将跟随着该节点继承自的各个父节点冒泡穿过整个的DOM节点层次,直到它遇到依附有该事件类型处理器的节点,此时,该事件是onclick事件。在冒泡过程中的任何时候都可以终止事件的冒泡,在遵从W3C标准的浏览器里可以通过调用事件对象上的stopPropagation()方法,在Internet Explorer里可以通过设置事件对象的cancelBubble属性为true。如果不停止事件的传播,事件将一直通过DOM冒泡直至到达文档根。


        第二、事件处理程序

                事件处理程序就是捕获到某个事件之后执行的程序,它有三种方式。

                1、html级事件处理程序,即在html标签中直接加入事件处理程序。如下所示:

<input type="button" value="button" οnclick="alert('hello word!')" />
                2、dom0级事件处理程序,即把一个函数赋值给一个事件的处理程序属性。代码如下:
var element=document.getElementById('button');
element.οnclick=function(){
       alert('hello word!');
}

               3、dom2级事件处理程序,即通过调用dom对象的addEventListener( )方法注册事件处理程序。addEventListener()方法需要三个参数,分别是事件名、事件处理程序的函数和useCapture, 一个bool类型,当为false时为冒泡获取(由里向外),true为capture方式(由外向里)。使用addEventListener方法时需要注意事件名不要加前缀“on”,通过addEventListener方法添加的事件处理程序只能通过removeEventListener才能删除。通过addEventListener可以为一个dom添加多个相同的事件处理程序并按顺序执行。代码如下:
var element=document.getElementById('button');
element.addEventListener('click',function(){alert('hello jim!')},false);
element.addEventListener('click',function(){alert('hello jack!')},false);
        

               在不遵循w3c标注的浏览器上并不支持addEventListener方法,例如IE8及以下版本的IE浏览器和Opera浏览器,它们在注册事件处理程序的时候要用到的是attachEvent方法,删除事件使用detachEvent,它们分别接收两个参数,分别是事件名和事件处理的函数。这里要注意了,使用这两个方法的时候,事件名必须是要加上前缀“on”的,否则无法识别。


        第三、事件对象。在触发dom上的事件时都会产生一个事件对象:event。它包含了事件的类型、鼠标的坐标等。我们可以通过event对象target属性指的触发事件的dom对象,在IE8及以下浏览器中要获取这个对象要通过srcElement这个属性来获得。event对象中的stopPropragation方法是阻止事件冒泡,preventDefault方法阻止默认行为,在IE8及以下浏览器中要设置event.cancelBubble=true阻止事件冒泡,设置event.returnValue=false阻止默认行为。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值