博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跨浏览器的事件对象
阅读量:6195 次
发布时间:2019-06-21

本文共 2175 字,大约阅读时间需要 7 分钟。

当我们在DOM上面触发一个事件的时候,就会调用对应的事件处理函数,这个时候会产生一个事件对象,我们叫做event,这个对象中有着很多的信息,我们来看一看 都有些啥子 先从DOM0级事件处理说起

Document  
aa
  

说明一下,这个event是这个事件函数自动产生的,我可以不叫做event,换成任何名字都可以的

var box=document.getElementById('box');box.onclick=function(ss){  alert(ss.type)   //"click"}

至于这个event对象,到底怎么来的,我也不知道,只是知道有这个东西。

说完了DOM0级事件对象,再来看看DOM2级事件对象

Document  
aa
  

同理,这里我们传入进去了参数是s,这个参数代表了我们的事件对象,他有一个type属性,用来查看事件类型 

虽然我们可以用任何的变量去接收这个事件对象,但是我们通常情况下,用的是event,约定俗成 
这个event对象都有些什么属性? 
具体查看这个链接
有两个属性需要区分 
target与currentTarget 
target:事件的目标 
currentTarget:处理程序当前正在处理事件的那个元素

Document
aa

事件是触发在box上面的,这个是实际的目标,也就是target的指向,currentTarget代表当前正在处理事件的对象,当事件冒泡到body上面的时候

currentTarge就指向了body,但是target不会变化,永远指向的都是box

stopPropagation方法和bubbles属性

stopPropagation:取消事件冒泡

bubbles:只读属性,只有这个属性为true,才能使用stopPropagation()方法

Document
aa

event.preventDefault()方法和cancelable属性

preventDefault:取消事件的默认行为

cancelable:只读属性,表明是否可以使用preventDefault()方法

什么时候会用到这个方法呢?比如说,链接的默认行为是跳转,如果你不想跳转,那就可以用这个方法了

刚刚说晚了DOM0级和DOM2级的事件对象,来看看IE的事件对象

在IE浏览器之下,我们可以有多种处理

var box=document.getElementById('box');box.onclick=function(){  var event=window.event  alert(event.type) //"click"}

在使用DOM0级的方法添加事件处理程序的时候,这个event对象,是window对象的一个属性存在的 

但是,如果我们是用attachEvent()添加的,那么就会有一个event对象传入到这事件处理函数

var box=document.getElementById('box');box.attachEvent("onclick",function(event){  alert(event.type) //"click"})

注意看,由于第一中情况,是作为window对象的属性存在的,这个函数是没有传入参数的,第二个函数是传入了一个event对象参数的 

来看看这个IE浏览器下的event都有什么属性 
srcElement :事件的目标,类似于target属性 
type:事件的类型 
returnValue:这个布尔值类型,默认为true,如果将这个设置为false,就可以用来取消事件的默认行为,类似于preventDefault()方法 
cancelBubble:布尔值类型,默认情况是false,设置为true,可以用来阻止事件冒泡,与stopPropagation()方法的用处一样

function getEvent(event){   return event?event:window.event}

 function getTarget(event){

   return event.target||event.srcElement
 }

 function prevent(event){

   if(event.preventDefault){
   event.preventDefault()
     }else{
        event.returnValue=false
      }
  }

 function cancel(event){

   if(event.stopPropagation){
   event.stopPropagation()
   }else{
   event.cancelBubble=true
   }
 }

上面是跨浏览器的一些兼容性的问题。一清二楚,很简单的封装

转载于:https://www.cnblogs.com/yiyistar/p/6500850.html

你可能感兴趣的文章
使用curl命令查看访问url的时间
查看>>
whois
查看>>
python添加环境变量
查看>>
Linux 新手容易犯的 7 个错误
查看>>
DP-01背包 (题)
查看>>
WinForm中跨线程操作控件
查看>>
CODING 敏捷实践完全指南
查看>>
unittest测试框架和测试报告的输出实例(一)
查看>>
下MFC中对象、句柄、ID之间的区别.
查看>>
如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
查看>>
Asp.Net MVC 分页、检索、排序整体实现
查看>>
python 输出当前行号
查看>>
12C -- 配置Application Continuity
查看>>
Flymeos插桩适配教程
查看>>
Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询
查看>>
C#的delegate简单练习
查看>>
还在用PS磨皮去皱?看看如何用神经网络高度还原你的年轻容貌!
查看>>
YARN中内存的设置
查看>>
java 基础2
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>