事件处理函数的this

 

浏览器有三种添加事件监听的方式。

第一种:直接在标签内写 οnclick=“fn” 

第二种:在js中 οnclick=fn

第三种:在js中 用el.attachEvent或者el.addEventListener()

 

三种方式添加的事件处理函数运行的scope是不同的,不同浏览器也不尽相同。

 

IE

  • js: el.onclick = fn ,fn的this->el
  • 在div标签中 onclick = "fn()" ,fn的this->window
  • js: el.attachEvent('onclick',fn); ,fn的this->window

Firefox、Chrome、Opera

  • js: el.onclick = fn ,fn的this->el
  • 在标签中 onclick = "fn()" ,fn的this->window (相当于执行eval())
  • js: el.addEventListener('onclick',fn); ,fn的this->el
可以下载附件或者直接复制一下代码来测试。
<!DOCTYPE HTML>
<html>
  <head>
    <title>MyHtml.html</title>
    <meta http-equiv="content-type" content="text/html; charset=GB2312">
  	<style type="text/css">
  		.conclusion{height:200px;}
  		.highlight{color:#fe6c00}
  		.experiment{width:200px;height:100px;color:#3164ac;float:left;margin:20px 0px 0px 30px;border:1px solid #eee}
  	</style>
  	<script type="text/javascript">
  		window.id = 'window';
  		var clickFn = function(){
  			alert("this指向 "+this.id); 
  		}
  		window.onload = function(){
 			document.getElementById("div2").οnclick=clickFn; //alert 弹出 div
  			if(navigator.appName == "Microsoft Internet Explorer"){
  				document.getElementById("div3").attachEvent('onclick',clickFn); //alert 弹出 window
  			}else{
  				document.getElementById("div3").addEventListener('click',clickFn,true);//alert 弹出 div
  			}
  		}
  	</script>
  </head>
  <body>
	  	<h2>给div添加事件触发程序。请点击下面三个div</h2>
	  	<div class="conclusion">
	  		<p><strong>IE</strong></p>
	  		<ul>
	  			<li>js: el.onclick = fn ,fn的this->el </li>
	  			<li>在div标签中 onclick = "fn()" ,fn的this->window </li>
	  			<li>js: el.attachEvent('onclick',fn); ,fn的this-><i class="highlight">window</i></li>
	  		</ul>
	  		<p><strong>Firefox、Chrome、Opera</strong></p>
	  		<ul>
	  			<li>js: el.onclick = fn ,fn的this->el </li>
	  			<li>在标签中 onclick = "fn()" ,fn的this->window (相当于执行eval())</li>
	  			<li>js: el.addEventListener('onclick',fn); ,fn的this-><i class="highlight">el</i></li>
	  		</ul>
	  	</div>
	  	
	  	<div id="div1" class="experiment" οnclick="clickFn();">div1 οnclick="clickFn();"</div>
	  	<div id="div2" class="experiment">div2 js: onclick = fn</div>
	  	<div id="div3" class="experiment">div3 js: attachEvent/addEventListener</div>
  </body>

</html>
 
请不要吝啬您的意见,谢谢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值