Event事件:

事件中的Event对象

  • 只要事件发生就会产生一个event事件

  • 事件发生后创建对象

  • Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。

  • 事件通常与函数结合使用,函数不会在事件发生前被执行

注意:在html中使用onclick属性触发事件,必须使用window.event获取event对象

event事件对象常见的属性和方法

事件对象属性方法说明
e.target返回触发事件的对象 标准
e.srcElement返回触发事件的对象 非标准【ie6-8使用】
e.currentTarget返回绑定事件的对象
e.type返回事件的类型,比如:click,mouseover 不带on
e.returnValue该属性阻止默认事件(默认行为) ie6-8,比如不让链接跳转
e.preventDefault()该属性阻止默认事件(默认行为)标准,比如不让链接跳转
e.stopPropagation()阻止冒泡 【标准】
e.cancelBubble阻止冒泡【ie】

 事件流-事件冒泡机制

气泡从水底开始往上升,由深到浅,升到最上面。在上升的过程中,气泡会经过不同深度层次的水。

相对应地:这个气泡就相当于我们这里的事件,而水则相当于我们的整个dom树;

事件从dom 树的底层,层层往上传递,直至传递到dom的根节点。 当子元素与父元素有相同的事件时,当子元素被触发时父元素也会被触发冒泡机制

注意:并不是所有的事件都能冒泡,以下事件不冒泡:blur、focus、load、unload

事件委托的优点:

1.减少事件注册,节省内存

2.在table上代理所有td的click事件

3.在ul上代理所有li的click事件

4.简化了dom节点更新时,相应事件的更新。

5.不用在新添加的li上绑定click事件

6.当删除某个li时,不用移解绑元素上的click事件【引出堆栈,内存泄漏,垃圾回收机制】

事件委托的缺点:

1.事件委托基于冒泡,对于不冒泡的事件不支持

2.层级过多,冒泡过程中,可能会被某层阻止掉

3.理论上委托会导致浏览器频繁调用处理函数,虽然很可能不需要处理。所以建议就近委托,比如在table上代理td,而不是在document上代理td。

4.把所有事件都用代理就可能会出现事件误判。比如,在document中代理了所有button的click事件,另外的人在引用改js时,可能不知道,造成单击button触发了两个click事件。

e.target和this的区别

区别:

e.target返回的是触发事件的对象(元素)

this 返回的是绑定事件的对象(元素)

e.currentTarget 当前绑定事件的元素

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值