取得event对象的变通方法
IE和firefox的事件模型有一定差别,firefox中必须手动传一个event对象给函数,函数中才可以使用
而我们一般有时候是这样写事件
<input type="button" onclick="fire()"/>
这个时候在IE中直接在fire函数中用window.event即可,firefox中就无能为力了,如果改成fire(e)
在fire函数中用e = window.event || e;发现还是不对。
原来系统默认套了一层函数使之成为onclick=function MouseClick(event){fire()};
那么如何在fire中取得event对象呢?
看下面代码,可能有BUG,欢迎大家讨论。
-------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
<script language="javascript">
function getEvent()
{
if( window.event ) return window.event;
var f = arguments.callee;
while(caller= f.caller){f=f.caller;}
return f.arguments[0];
}
function test(){
e = getEvent();
alert(e.clientX);
}
function funb(){
e = getEvent();
alert(e.clientX);
}
</script>
</head>
<body>
<input type=button value="test" onclick="test()">
<script language="javascript">
document.getElementsByTagName("input")[0].onmouseover=function(){
funb();
}
</script>
</body>
</html>
<script>
</script>
---------------
这样我们就可以像使用window.event一样方便的使用事件对象了。
问题点数:200、回复次数:7Top
1 楼ttyp(@http://www.cnblogs.com/ttyp/)回复于 2006-02-23 15:24:06 得分 100
<input type=button value="test" onclick="test()">
<script language="javascript">
document.getElementsByTagName("input")[0].onmouseover=function(e){
var ee = window.event||e;
alert(ee.clientX);
}
</script>
window2k,ff,ie6.0下运行通过Top
2 楼kangqin(小康)回复于 2006-02-23 15:27:47 得分 30
一楼的回复是合理解决方法.Top
3 楼ice_berg16(寻梦的稻草人)回复于 2006-02-23 16:40:29 得分 0
to ttyp
你这种方法当然可以,
但我的意思你没有理解,
onclick="test()",我是说在test()函数中获得event对象,Top
4 楼ice_berg16(寻梦的稻草人)回复于 2006-02-23 16:41:56 得分 0
而且如果函数调用的层次很深怎么办?
你还要一次一次的传递e给调用的函数吗?Top
5 楼ttyp(@http://www.cnblogs.com/ttyp/)回复于 2006-02-23 16:50:44 得分 0
哦,你是想要个全局变量的概念?
不过在FF下,如果调用的很深是传下去的,这样似乎结果性更好点吧?Top
6 楼mingxuan3000(铭轩)回复于 2006-02-23 21:06:35 得分 35
学习Top
7 楼guo9038(琥珀)回复于 2006-02-24 08:52:06 得分 35
MarkTop




