先看addListener也就是Ext里面的on方法
?
/*
* 注册事件函数,返回是否注册成功
* el : String/HTMLElement 一个html元素或其id,事件处理器将会被指定到其上
* eventName : String 需要监听的事件类型
* handler : Function 事件调用的处理函数。此函数将会被传递以下参数:
* *****evt : EventObject EventObject ,描述了事件。
*****t : Element Element ,它是事件的目标(target)。
注意:此项可能被用delegate选项过滤。
* ****o : Object 来自调用addListener时的选项对象。
* * 例子:
* el.addListener('click', this.onClick, this,
* { single: true, delay: 100, stopEvent : true, forumId: 4})
*/
addListener : function( el , eventName , fn ) {
/* *********************************************************
getDom : function( el ) {
if ( !el || !document ) {
return null;
}
return el.dom ? el.dom :
( typeof el == 'string' ? document.getElementById( el ) : el );
}
********************************************************* */
el = Ext.getDom( el );
// 参数检查
if ( !el || !fn ) {
return false;
}
// 如果是unload事件,那么直接添加在unloadListeners数组中,
//当window的onunload事件触发时执行
if ( "unload" == eventName ) {
unloadListeners[unloadListeners.length] = [
el , eventName , fn
];
return true;
}
// 封装函数,处理event变量不兼容的问题
/* getEvent : function( e ) {
var ev = e || window.event;
if ( !ev ) {
var c = this.getEvent.caller;
while ( c ) {
ev = c.arguments[0];
if ( ev && Event == ev.constructor ) {break;}
c = c.caller;
}
}
return ev;
} */
var wrappedFn = function( e ) {
return typeof Ext != 'undefined'
? fn( Ext.lib.Event.getEvent( e ) )
: false;
};
var li = [ el , eventName , fn , wrappedFn ];
var index = listeners.length;
listeners[index] = li;
// 下面语句就直接注册事件了
this.doAdd( el , eventName , wrappedFn , false );
return true;
}