ie和firefox中的事件处理

事件传播三个阶段:

1,捕捉阶段,事件从对象沿着文档树向下传播给目标节点。2,目标节点触发阶段:在目标上的适合的事件处理程序将运行。3,气泡阶段,在这个阶段,事件将从目标元素向上传播或者气泡回对象的文档层次。

ie和ff下的事件传播阶段应该是一样的。但是两个浏览器依据的模型有区别。

先看firefox

由于firefox支持dom2的时间模型,用法可以直接这样:

function test(event){
    alert(event.clientX);
}
ele.addEventListener('click',test,true);//ele为某dom元素

关于这个模型(event可以理解为一个全局变量)

DOM2的事件模型函数 作用
addEventListener 添加事件监听函数。
removeEventListener 删除事件监听函数。
preventDefault 组织默认事件的发生
stopPropagation 可以组织事件从当前正在处理它的节点传播
createEvent 创建事件
Event属性 作用
type 发生的事件的类型
target 发生事件的节点
currentTarget 发生当前在处理的事件的节点
eventPhase 指明了当前事件传播过程。
Event.CAPTURING_PHASE,
Event.AT_TARGET,
Event.BUBBLING_PHASE
timestamp 一个Date对象,声明了事件何时发生
bubbles 一个布尔值,是否在文档树中气泡
cancelable 一个布尔值,是否能用preventDefault

作用的对象类型DOMFocusIn,DOMFocusOut和DOMActivate

UIEvent属性 作用
view 发生事件的Window对象
detail 一个数字,对于click事件,mousedown,mouseup的事件。1代表点击一次,2代表双击,3代表点击三次。
对于DOMActivate事件,这个字段的值为1,表示正常激活,2表示超级激活,例如双击鼠标或同时按下Shift和Enter键。
MouseEvent属性 作用
button 0表示左键,1表示中间键,2表示右键。
altKey,ctrlKey,metaKey
,shitKey
是否Alt键,Ctrl键,Meta键,Shift键。
clientX,clientY 声明鼠标指针相对客户区或浏览器窗口的X坐标和Y坐标。
screenX,screenY 声明鼠标指针相对于用户显示器的左上角X坐标和Y坐标。
relateTarget 对于mouseover事件,它是鼠标移动到目标上时所离开的那个节点。对于mouseout事件,他是离开目标时,鼠标进入节点。

再来看看ie

ie不支持dom2事件模型,但是可以用window.event来获得event对象,用法可以这样:

ele.onclick=function(){
   alert(window.event.clientX);
}//ele为某dom元素

window.event包含的属性和方法:

Event属性 作用
type 与DOMEvent的type相同
srcElement 发生事件的文档元素。与DOM Event对象的target属性兼容
button 1表示左键,2表示右键,4表示中间键
clientX,clientY 同DOM的MouseEvent对象的同名属性兼容
offsetX,offsetY 相对于源元素的位置。
altKey,ctrlKey,
shitfKey
同DOM
keyCode 得到Keydown,keyup事件的键代码的Unicode
fromElement,
toElement
fromElement声明mouseover事件中鼠标移动过的文档元素。
toElement声明mouseout事件中鼠标移到文档元素。它们等价于2级DOM中的MouseEvent对象的relatedTarget属性。
cancelBubble 把它设为true,可以组织当前事件进一步气泡到包容层次的元素。
returnValue 可以组织浏览器执行与事件相关的默认动作。

5 Responses to ie和firefox中的事件处理 »

  1. prom dresses 评论 2009-12-01 19:35

    ie 和firefox 到底哪个更好呢?有的人说火狐更好点。

    回复

    joe 回复 十二月 2nd, 2009 at 23:37

    理论上是ff了

    回复

    WAHCHI 回复 十二月 4th, 2009 at 10:37

    个人更喜欢用FF,但从做站的角度出发,两个都得兼顾

    回复

  2. rong179 评论 2009-12-02 21:36

    ;) 留个脚印

    回复

  3. tyson 评论 2010-08-23 16:59

    FF的DOM2模型中的target和currentTarget有什么区别呢?

    回复

Leave a Reply

Email address is not published

You should say a Chinese word to pass spam check. If you can not input Chinese, just copy 你好 and paste them into comment text box.