当我们在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 } }上面是跨浏览器的一些兼容性的问题。一清二楚,很简单的封装