紫玉云天

{Css, Js, As3, 前端开发}
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Js获取事件对象

Posted on 2010-08-04 17:15  喜羊羊羊  阅读(1535)  评论(0)    收藏  举报

一般做法:

<input type="button" id="test" value="点我测试" />
<script type="text/javascript">
	var testBtn = document.getElementById('test');
	testBtn.onclick = testFun;
	
	function testFun(e)
	{
		var evt = e || window.event;
		alert(evt);
	}
</script>

或者:

<input type="button" id="test" value="点我测试" />
<script type="text/javascript">
	var testBtn = document.getElementById('test');
	
	if(window.addEventListener)
	{
		testBtn.addEventListener('click', testFun, false);
	}
	else if(window.attachEvent)
	{
		testBtn.attachEvent('onclick', testFun);
	}
	
	function testFun(e)
	{
		var evt = e || window.event;
		alert(evt);
	}
</script>

返回的值都是 “[object Event]“。

 

但如果是这种方式呢?

 

<input type="button" id="test_1" value="点我测试" onclick="testFun_1()" />
<script type="text/javascript">
	function testFun_1()
	{
		//此处如何获得?
	}
</script>

 

“内事不决问百度,外事不决问谷歌”, 此言不虚。搜索了下,答案还真不少,不过大多数雷同(可能是巧合)。

http://www.blueidea.com/tech/web/2009/6912.asp

http://www.cnblogs.com/cuixiping/archive/2008/04/13/1150847.html

 

愚公 的这个文章(貌似转帖)还是颇有见解的。

 

<input type="button" id="test_1" value="点我测试" onclick="testFun_1()" />
<script type="text/javascript">
	function testFun_1()
	{
		var evt = getEvent();
		alert(evt);
	}
	
	function getEvent(){     
		if(window.event)    return window.event;  //这里用对象检测更为妥当       
		func=getEvent.caller;            
		while(func!=null){    
			var arg0=func.arguments[0];
			if(arg0){
				if((arg0.constructor==Event || arg0.constructor ==MouseEvent)
					|| (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){    
					return arg0;
				}
			}
			func=func.caller;
		}
		return null;
 	}
</script>

 


一般来说,很少用到这种侵入式的写法(js写在html标签中 onclick="testFun_1()"),也不推荐使用这种方法,会造成维护和开发的麻烦。