会员中心
用户名:    密码:    验证码:      免费注册会员

jquery手册   CSS2手册       请关注健康

CSSer > 客户端开发 > web标准与前台开发 > 给对象增加一个简单的自定义事件机制

来源: 作者: 发布时间:2007-03-04
雅虎收藏夹 百度收藏 Google书签 Yahoo书签 新浪ViVi 搜狐网摘 365Key网摘 天极网摘 diglog 和讯网摘 POCO网摘 YouNote网摘 博拉网 天下图摘 Del.icio.us digg reddit spurl BlinkList blogmarks
 

 

By: 泣红亭
<html>

 

 

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>给对象增加一个简单的自定义事件机制</title>
</head>

 

 

<body>
<script type="text/javascript">
function MyObject()
{
// 保存事件监听函数数组
this.RunEventListeners = new Array();
}

 

 

MyObject.prototype.Run = function()
{
// 在这里实现Run方法的代码并且触发
// 下边是激活onrun事件
for(var i = 0; i < this.RunEventListeners.length; i++)
this.RunEventListeners[i](this);
}

 

 

MyObject.prototype.AddEvent = function(name, listener)
{
switch(name.toLowerCase())
{
case "onrun":
this.RunEventListeners[this.RunEventListeners.length] = listener;
break;
// 还可以在这里增加各种事件,最好判断一下该listener是事已经被添加,以免重复执行,不过这里省了
default:
break;
}
}

 

 

function OnRun1(sender)
{
alert("已经执行了OnRun1事件")
}

 

 

function OnRun2(sender)
{
alert("已经执行了OnRun2事件");
}

 

 

var myobj = new MyObject();

 

 

// 添加两个监听函数
myobj.AddEvent("onrun", OnRun1);
myobj.AddEvent("onrun", OnRun2);

 

 


// 执行Run方法,如无例外,会触发onrun事件
myobj.Run();
</script>
</body>

 

 

</html>

 

 


By: 月影
<html>

 

 

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>给对象增加一个简单的自定义事件机制</title>
</head>

 

 

<body>
<script type="text/javascript">
Function.prototype.DECLEAR_EVENT = function(evt_type)
{
var args = arguments;
var method = this;
var type = evt_type;

 

 

return function()
{
method.apply(this, args);
for(each in this.EventListeners[type])
this.EventListeners[type][each](this);
}
}

 

 

function MyObject()
{
// 保存事件监听函数数组
this.EventListeners = new Array();
}

 

 

MyObject.prototype.Run = function()
{
// 在这里实现Run方法的代码

 

 

}.DECLEAR_EVENT("onrun");  //onrun事件声明

 

 

MyObject.prototype.AddEvent = function(name, listener)
{
this.EventListeners[name]?
this.EventListeners[name].push(listener):this.EventListeners[name]=[listener];
}

 

 

function OnRun1(sender)
{
alert("已经执行了OnRun1事件")
}

 

 

function OnRun2(sender)
{
alert("已经执行了OnRun2事件");
}

 

 

var myobj = new MyObject();

 

 

// 添加两个监听函数
myobj.AddEvent("onrun", OnRun1);
myobj.AddEvent("onrun", OnRun2);

 

 


// 执行Run方法,如无例外,会触发onrun事件
myobj.Run();
</script>
</body>

 

 

</html>

 

 

By: DSONet
<SCRIPT LANGUAGE="JavaScript">
<!--
function EventTarget(){
this._listeners={};
this.addEventListener=function(sType,fnHandle){
if ('function'!=typeof fnHandle){return;}
var ls=this._listeners[sType];
if(!ls)ls=this._listeners[sType]={};
ls[EventTarget.toHashCode(fnHandle)]=fnHandle;
};
this.dispatchEvent=function(sType){
if(!this._listeners[sType])return;
for(var hc in this._listeners[sType]){
this._listeners[sType][hc].call(this);
}
};
}
EventTarget.toHashCode=function(o){if(o._hashCode)return o._hashCode;return o._hashCode="_"+(EventTarget._hashCodeCounter++).toString(32);};
EventTarget._hashCodeCounter=0;
function TestEvent(){
EventTarget.call(this);
this.test=function(){
alert('test方法开始执行');
this.dispatchEvent('onTest');
alert('test方法执行完毕');
};
};
var test=new TestEvent();
test.addEventListener('onTest',function(){alert('监听到test事件');});
test.test();
var test2=new TestEvent();
test2.test();
//-->
</SCRIPT>

 


相关文章