extjs2.0---事件处理

 Extjs里的事件处理,只有继承了Ext.util.Observable类才具有事件功能

1.先看一个简单点的例子

Java代码
  1. //Extjs里的事件处理,只有继承了Ext.util.Observable类才具有事件功能   
  2.   
  3. Employee = function(){  
  4.     this .addEvents( "test" ); //注册事件,该事件名字为:test   
  5. }  
  6.   
  7. Ext.extend(Employee,Ext.util.Observable);  
  8.   
  9. todo = function(){  
  10.     alert("event was fired" );  
  11. }  
  12.   
  13. var em = new  Employee();  
  14. em.on("test" ,todo); //将方法绑定到事件test上   
  15. em.fireEvent("test" ); //触发事件test   
//Extjs里的事件处理,只有继承了Ext.util.Observable类才具有事件功能

Employee = function(){
	this.addEvents("test");//注册事件,该事件名字为:test
}

Ext.extend(Employee,Ext.util.Observable);

todo = function(){
	alert("event was fired");
}

var em = new Employee();
em.on("test",todo);//将方法绑定到事件test上
em.fireEvent("test");//触发事件test




2.
页面代码:

Java代码
  1. <input type= "button"  name= "button1"  id= "button1"  value= "button1"  />  
<input type="button" name="button1" id="button1" value="button1" />



js代码:

Java代码
  1. todo = function(){  
  2.     alert("event was fired" );  
  3. }  
  4.   
  5. //window.onload = function(){}等价于Ext.onReady(function(){});页面加载完后就执行该函数   
  6. Ext.onReady(function() {  
  7.         //返回的button1是Observable的子类,所以具有事件处理功能   
  8.         var button1 = Ext.get("button1" ); //返回的Element对象,不等价于document.getElementById("button1")   
  9. //      var button1 = Ext.getDom("button1");//返回的HTMLElement对象,等价于document.getElementById("button1");   
  10.           
  11.         alert(button1.id);//button1   
  12.           
  13. //      button1.addListener("click",todo);//addListener与on是一样   
  14. //      button1.addListener("mouseover",todo);   
  15.           
  16.           
  17.         //通过EventManager来实现   
  18.         Ext.EventManager.addListener(button1,"click" ,todo);  
  19.         Ext.EventManager.addListener(button1,"mouseover" ,todo);  
  20.           
  21.     }  
  22. )  
todo = function(){
	alert("event was fired");
}

//window.onload = function(){}等价于Ext.onReady(function(){});页面加载完后就执行该函数
Ext.onReady(function() {
		//返回的button1是Observable的子类,所以具有事件处理功能
		var button1 = Ext.get("button1");//返回的Element对象,不等价于document.getElementById("button1")
//		var button1 = Ext.getDom("button1");//返回的HTMLElement对象,等价于document.getElementById("button1");
		
		alert(button1.id);//button1
		
//		button1.addListener("click",todo);//addListener与on是一样
//		button1.addListener("mouseover",todo);
		
		
		//通过EventManager来实现
		Ext.EventManager.addListener(button1,"click",todo);
		Ext.EventManager.addListener(button1,"mouseover",todo);
		
	}
)




3.

Java代码
  1. todo = function(){  
  2.     alert(this .id); //此处的this由addListener的第3个参数决定   
  3. }  
  4.   
  5.   
  6. Ext.onReady(function() {  
  7.         //返回的button1是Observable的子类,所以具有事件处理功能   
  8.         var button1 = Ext.get("button1" );  
  9.           
  10.         //先打印出button1,再打印出ext-gen1,刚好与addListener添加的顺序相反   
  11.         button1.addListener("click" ,todo, this ); //todo函数打印出:ext-gen1   
  12.         button1.addListener("click" ,todo,button1); //todo函数打印出:button1   
  13.     }  
  14. )  
todo = function(){
	alert(this.id);//此处的this由addListener的第3个参数决定
}


Ext.onReady(function() {
		//返回的button1是Observable的子类,所以具有事件处理功能
		var button1 = Ext.get("button1");
		
		//先打印出button1,再打印出ext-gen1,刚好与addListener添加的顺序相反
		button1.addListener("click",todo,this);//todo函数打印出:ext-gen1
		button1.addListener("click",todo,button1);//todo函数打印出:button1
	}
)



4.

Java代码
  1. todo = function(){  
  2.     alert(this .id); //此处的this由addListener的第3个参数决定   
  3. }  
  4. Ext.onReady(function(){  
  5.         var button1 = Ext.get("button1" );  
  6.         //addListener 的第4个参数是个配置选项,所以需要用{},有4个配置选项,delay(触发事件多久后执行指定的函数),scope(如果第3个参数设置了,此处可以 省),single(事件触发一次后,就被移走,以后再触发该事件无效),buffer(缓存区,也就是多长时间内触发该事件大于1次都认为是1次)   
  7.         //delay和buffer同时使用时有错误,具体原因还不知道是为什么?   
  8.         button1.addListener("click" ,todo,button1,{delay: 3000 ,single: false }); //因为button1也属于Observable类的子类,所以查看文档时可以直接查看Observable中的addListener方法   
  9.     }  
  10. )  
todo = function(){
	alert(this.id);//此处的this由addListener的第3个参数决定
}
Ext.onReady(function(){
		var button1 = Ext.get("button1");
		//addListener的第4个参数是个配置选项,所以需要用{},有4个配置选项,delay(触发事件多久后执行指定的函数),scope(如果第3个参数设置了,此处可以省),single(事件触发一次后,就被移走,以后再触发该事件无效),buffer(缓存区,也就是多长时间内触发该事件大于1次都认为是1次)
		//delay和buffer同时使用时有错误,具体原因还不知道是为什么?
		button1.addListener("click",todo,button1,{delay:3000,single:false});//因为button1也属于Observable类的子类,所以查看文档时可以直接查看Observable中的addListener方法
	}
)



5.

Java代码
  1. //window.onload = function(){}等价于Ext.onReady(function(){});  页面加载完后就执行该函数   
  2. Ext.onReady(function(){  
  3.         alert("ok1" );  
  4.         function AA(){  
  5.             alert("ok2" );  
  6.         }  
  7.     }  
  8. )  
  9. //只会打印出ok1,ok2不会被打印出来。因为页面加载完后会去执行函数function(),但是function()函数里的函数(或叫类)AA则不会去执行的。   
//window.onload = function(){}等价于Ext.onReady(function(){});  页面加载完后就执行该函数
Ext.onReady(function(){
		alert("ok1");
		function AA(){
			alert("ok2");
		}
	}
)
//只会打印出ok1,ok2不会被打印出来。因为页面加载完后会去执行函数function(),但是function()函数里的函数(或叫类)AA则不会去执行的。

 

Java代码
  1. Ext.onReady(function(){  
  2.         alert("ok1" );  
  3.         function AA(){  
  4.             alert("ok2" );  
  5.         }  
  6.         new  AA();  
  7.     }  
  8. )  
  9.   
  10. //这样ok1和ok2都会被打印出来,因为new AA()去调用了   
Ext.onReady(function(){
		alert("ok1");
		function AA(){
			alert("ok2");
		}
		new AA();
	}
)

//这样ok1和ok2都会被打印出来,因为new AA()去调用了




6.等价写法:

Java代码
  1. todo = function(){  
  2.     alert(this .id); //此处的this由addListener的第3个参数决定   
  3. }  
  4. Ext.onReady(function(){  
  5.         var button1 = Ext.get("button1" );  
  6.           
  7.         //第一种写法   
  8. //      button1.addListener("click",todo,button1);   
  9. //      button1.addListener("mouseover",todo,button1);   
  10.           
  11.         //第二种写法   
  12. //      button1.on({click:todo,mouseover:todo,scope:button1});   
  13.   
  14.         //第三种写法   
  15.         button1.on(  
  16.             {  
  17.                 click:{scope:button1,delay:3000 ,fn:todo},  
  18.                 mouseover:{scope:button1,delay:1000 ,fn:todo}  
  19.             }  
  20.         );  
  21.           
  22.           
  23.           
  24.     }  
  25. )  
todo = function(){
	alert(this.id);//此处的this由addListener的第3个参数决定
}
Ext.onReady(function(){
		var button1 = Ext.get("button1");
		
		//第一种写法
//		button1.addListener("click",todo,button1);
//		button1.addListener("mouseover",todo,button1);
		
		//第二种写法
//		button1.on({click:todo,mouseover:todo,scope:button1});

		//第三种写法
		button1.on(
			{
				click:{scope:button1,delay:3000,fn:todo},
				mouseover:{scope:button1,delay:1000,fn:todo}
			}
		);
		
		
		
	}
)



7.

Java代码
  1. Ext.onReady(  
  2.     function(){  
  3.         alert("ok1" ); //ok1   
  4.         AA = function(){  
  5.             alert("ok2" ); //ok2         
  6.         };  
  7.         //同时定义多个属性和方法   
  8.         AA.prototype = {  
  9.             aa:1 ,  
  10.             bb:2 ,  
  11.             a:function(){  
  12.                 alert("aa" ); //因为没有调用,所以不会打印出来   
  13.             },  
  14.             b:function(){  
  15.                 alert("bb" ); //因为没有调用,所以不会打印出来   
  16.             }  
  17.         }  
  18.         new  AA();  
  19.           
  20.     }  
  21. )  
Ext.onReady(
	function(){
		alert("ok1");//ok1
		AA = function(){
			alert("ok2");//ok2		
		};
		//同时定义多个属性和方法
		AA.prototype = {
			aa:1,
			bb:2,
			a:function(){
				alert("aa");//因为没有调用,所以不会打印出来
			},
			b:function(){
				alert("bb");//因为没有调用,所以不会打印出来
			}
		}
		new AA();
		
	}
)



8.事件处理EventObject

Java代码
  1. Ext.onReady(function(){  
  2.     var win = new  Ext.Window({  
  3.         title:'hello' ,  
  4.         html:'world' ,  
  5.         width:400 ,  
  6.         height:300   
  7.     });  
  8.     win.show();  
  9.     //查看Extjs的文档:Ext.Window中的Public Events部分查看到:move : ( Ext.Component this, Number x, Number y ) ,默认3个参数,所以才有得下面函数的c,x,y   
  10.     win.on("move" ,moving);  
  11. })  
  12.   
  13. moving = function(c,x,y){  
  14.     alert(c.id);  
  15.     alert(x);  
  16.     alert(y);  
  17. }  
Ext.onReady(function(){
	var win = new Ext.Window({
		title:'hello',
		html:'world',
		width:400,
		height:300
	});
	win.show();
	//查看Extjs的文档:Ext.Window中的Public Events部分查看到:move : ( Ext.Component this, Number x, Number y ) ,默认3个参数,所以才有得下面函数的c,x,y
	win.on("move",moving);
})

moving = function(c,x,y){
	alert(c.id);
	alert(x);
	alert(y);
}



另一个例子:


页面代码:

Java代码
  1. <a href= "http://www.baidu.com"  id= "baidu" >百度</a>  
<a href="http://www.baidu.com" id="baidu">百度</a>


js代码:

Java代码
  1. //事件处理EventObject   
  2.   
  3. todo = function(e){//EventObject,在这里可以理解为:EventObject是HTMLElement对象的click事件的默认参数   
  4.     alert(this .id); //baidu   
  5.     var htmlEl = e.getTarget();//返回值是HTMLElement,得到事件触发的目标,这里也就是指<A>连接标签   
  6.     alert(htmlEl.innerText);//打印出:"百度"  (HTMLElement有innerHTML和innnerText方法。 Element没有)   
  7.     e.stopEvent();//阻止事件继续发生,也就是<A>标签不会跳转到baidu页面了   
  8.       
  9.     //获得实际传递参数值   
  10.     alert(arguments.length);//3   
  11.     alert(arguments[2 ].aa); //test   
  12.     alert(arguments[2 ][ "aa" ]); //test   
  13.       
  14. }  
  15. Ext.onReady(  
  16.     function(){  
  17.         var  baidu = Ext.get("baidu" );  
  18.         baidu.on("click" ,todo,baidu,{aa: 'test' });  
  19.     }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值