少说话,直接给出示例代码。

复制代码代码如下所示:



功能eventutil(){

无功_self =这;

只需添加事件

VaR AddEvent =(函数(){()

如果(文件。addEventListener){

返回函数(EL,类型,FN){

El.addEventListener(型、FN、假);

}

{人}

返回函数(EL,类型,FN){

el.attachevent(+类型,函数(){

返回fn.call(厄尔尼诺事件窗口。);

});

}

}

});

只需添加属性更改事件

无功addpropertychangeevent =功能(obj,FN){

如果(窗口。ActiveX对象){

obj.onpropertychange = FN;

{人}

Obj.addEventListener(输入

}

}

删除事件

无功removeevent =功能(obj,类型,FN){

如果(obj。removeEventListener){

Obj.removeEventListener(型、FN、假);

else if(obj。detachevent){ }

obj.detachevent(+型,obj { +类型+ FN });

obj { +类型+ FN } = null;

}

}

加载事件

无功loadevent =功能(Fn){

VaR在window.onload oldonload =;

如果(typeof oldonload!=函数{){

在window.onload = FN;

{人}

在window.onload =函数(){

Oldonload();

(FN);

}

}

}

停止/事件

无功stopevent =功能(e){

E = e window.event | |;

如果(e.preventDefault){

E.preventDefault();

e.stoppropagation();

{人}

e.returnvalue = false;

e.cancelbubble =真;

}

}

如果只有停止事件

VaR里面=功能(e){

E = e window.event | |;

如果(!{){

e.cancelbubble =真;

{人}

e.stoppropagation();

}

}

获取事件源对象

无功getevent1 =功能(e){

E = e window.event | |;

var obj = e.srcelement e.srcelement:e.target;

返回对象;

}

获取事件源对象

无功getevent2 =功能(e){

如果(窗口。事件)返回window.event;

var c = getevent2.caller;

而(c.caller){

C = c.caller;

}

返回c.arguments { 0 };

}

或更强大的

无功getevent3 =功能(e){

VaR E = e window.event | |;

如果(!e){

var c = this.getevent3.caller;

当(c){

E = c.arguments { 0 };

如果(E(事件= = e.constructor | | { MouseEvent = = e.constructor))

打破;

}

C = c.caller;

}

}

VaR目标= e.srcelement e.srcelement:e.target,

currentn = target.nodename.tolowercase(),

parentn = target.parentnode.nodename.tolowercase(),

grandn = target.parentnode.parentnode.nodename.tolowercase();

返回{ E、目标、currentn,parentn,grandn };

}

_self.addevent = AddEvent;

_self.addpropertychangeevent = addpropertychangeevent;

_self.removeevent = removeevent;

_self.loadevent = loadevent;

_self.stopevent = stopevent;

_self.stoppropagation =里面;

_self.getevent1 = getevent1;

_self.getevent2 = getevent2;

_self.getevent3 = getevent3;

}

无功eventutil =新eventutil();

eventutil.loadevent(函数(){()

eventutil.addevent(文档,点击

警报(eventutil.getevent3(E));

});

eventutil.addpropertychangeevent(文档,功能(e){

警报(eventutil.getevent3(E));

});

});





Javascript事件处理分为三个阶段:捕获-处理-起泡。

以单击按钮为例:

捕获阶段:从外层到内层,首先调用窗口注册点击捕获阶段监控方法,然后将文档、主体、一层父节点,直到按钮本身。

处理阶段:调用按钮本身的单击监视方法。

起泡阶段:从按钮开始,从内层到外层,依次调用各级父节点的起泡阶段监控方法,直到窗口为止。

然而,IE8和IE低版本,捕获阶段是不支持的,所以事件的捕获阶段的监控是不常见的。

通常的事件处理方法如下:

复制代码代码如下所示:

功能EventHandler(e){

E = e window.event | |;

VaR目标= e.target e.srcelement | |;

…



}



e是事件对象。当事件被触发时,它是作为一个参数传递,但它不适合IE8和低版本的IE浏览器只能通过全球性的事件变量的访问,但它是很好的,不会有同时处理两事件。