|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发平常我们猎取事务对象一样平常写法以下:functiongetEvent(event){returnevent||window.event//IE:window.event}假如没有参数,也可写成(非IE:事务对象会主动传送给对应的事务处置函数,且为第一个参数):
functiongetEvent(){
returnarguments[0]window.event//IE:window.event
}
如许的写法在除Firefox(测试版本:3.0.12,下同)外的扫瞄器上运转都不会有成绩,但Firefox为何破例呢?让我们如许一种情况:
<buttonid="btn"onclick="foo()">按钮</button>
<script>
functionfoo(){
vare=getEvent();
alert(e);}
</script>
运转了局在Firefox中是undefined,为何呢?
在Firefox中挪用实际上是如许的,先挪用实行的是:
functiononclick(event){
foo();
}
然后挪用实行的是:
functionfoo(){
vare=getEvent();
alert(e);
}
会发明在Firefox下onclick="foo()"中的foo()没法主动传进事务对象参数,而默许传送给了体系天生的onclick函数,那本例我们能够经由过程getEvent.caller.caller.arguments[0]取得事务对象。
因而,我们的getEvent能够优化成(参照yui_2.7.0b中的event/event-debug.js中getEvent办法):
functiongetEvent(event){
varev=eventwindow.event;
if(!ev){
varc=this.getEvent.caller;
while(c){
ev=c.arguments[0];
if(ev&&(Event==ev.constructorMouseEvent==ev.constructor)){/怿飞注:YUI源码BUG,ev.constructor也多是MouseEvent,纷歧定是Event
break;
}
c=c.caller;
}
}
returnev;
}
固然另有一个很复杂的办理办法,就是手动将参数传送给onclick="foo()":
<buttonid="btn"onclick="foo(event)">按钮</button>
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。 |
|