您的位置:首页 > Web前端 > JavaScript

关于javascript中的事件学习及总结

2008-04-09 13:05 621 查看
1关于事件对象

ie:事件对象是window对象的一个属性event

dom:event对象是作为唯一参数传递给事件处理函数。arguments[0]

2关于IE与DOM事件兼容性的总结(参考javascript高级程序设计)

DOM属性/方法IE属性/方法
altKeyaltKey
bubbles-
buttonbutton
cancelBubblecancelBubble
charCodekeyCode
clientXclientX
clientYclientY
ctrlKeyctrlKey
currentTarget-
detail-
eventPhase-
isChar-
keyCodekeyCode
metaKey-
pageXclientX+document.body.scrollLeft
pageYclientY+document.body.scrollTop
preventDefault()returnValue = false
relateTargetfromElement/toElement
screenXscreenX
screenYscreenY
shiftKeyshiftKey
stopPropagation()cancelBubble = true
targetsrcElement
timeStamp-
typetype
具体的属性和方法意思我就不写清楚了,有不太明白的可以baidu、google一下~

3关于跨平台事件(针对第二点各个属性在ie和ff下的不同)

在这里javascript高级程序设计一书总结了一个容器对象,可以方便的解决事件兼容性问题。

具体如下:

<html>

<head>

<script>

var app = function()

var foo1 = function()

var foo2 = function()

</script>

</head>

<body onload="app()">

<p id="mypp">test</p>

</body>

</html>
答案是上面的代码会先执行第二个alert。

如果你觉得你的思维是正确的那么再看看下面的代码:

test2

<html>

<head>

<script>

var app = function()

{

var obj = document.getElementById("mypp");

obj.attachEvent("onclick",foo1);

obj.attachEvent("onclick",foo2);

obj.attachEvent("onclick",foo3);

obj.attachEvent("onclick",foo4);

obj.attachEvent("onclick",foo5);

obj.attachEvent("onclick",foo6);

obj.attachEvent("onclick",foo7);

}

var foo1 = function(){alert("1");};

var foo2 = function(){alert("2");};

var foo3 = function(){alert("3");};

var foo4 = function(){alert("4");};

var foo5 = function(){alert("5");};

var foo6 = function(){alert("6");};

var foo7 = function(){alert("7");};

</script>

</head>

<body onload="app()">

<p id="mypp">test</p>

</body>

</html>
一段关于此的英文解释:

When event fires on the object, the object's event handler is called before pDisp, the specified function. If you attach multiple functions to the same event on the same object, the functions are called in random order, immediately after the object's event handler is called.

引用网上一位高人说的:

并不是什么随机问题,你可以去研究研究哈希对象,这种对象插入新元素的时候并不是顺序插入的,而是根据计算所得的hash值而定的,但在取用这些对象的时间是按照一定的顺序取的,所以就会出现你这种所谓的乱序问题。我估计DHTML里的这些对象的事件处理函数存放及JS对象都是一个个哈希对象,都是key-value这种键值对的模式。

所以在使用上还是要慎重的,最好不要做依赖于顺序的设计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: