上面的代码是通过设置HTML标签属性为" />
当前位置:首页 > 日记 > 正文

深入理解在JS中通过四种设置事件处理程序的方法

深入理解在JS中通过四种设置事件处理程序的方法

所有的JavaScript事件处理程序的作用域是在其定义时的作用域而非调用时的作用域中执行,并且它们能存取那个作用域中的任何一个本地变量。但是HTML标签属性注册处理程序就是一个例外。看下面四种方式:

第一种方式(HTML标签属性):

<input type="button" id="btn1" value="测试" onclick="alert(this.id);" />

上面的代码是通过设置HTML标签属性为给button 添加了点击事件,当点击button 按钮时会弹出这个button的id,即btn1。

这种通过HTML属性来注册事件处理程序是一个例外。它们被转换为能存取全局变量的顶级函数而非任何本地变量。由于历史的原因,它们运行在一个修改后的作用域链中。通过HTML属性定义的事件处理程序能像本地变量一样使用目标对象、容器对象(form)对象和document对象的属性。它会被浏览器转换为类似如下的代码:

 function (event){  with(document){   with(this.form||{}){    with(this){     /*具体的事件处理代码*/    }   }  }  }

关于with的用法,可以自行查阅,这里后面有文章讲解。读者先自行了解一下。提供一个连接(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/with)

这种方式现在已经不推荐使用。

第二种方式(调用函数)

<input type="button" id="btn2" value="测试" onclick="test()" /><script type="text/javascript">  function test(){   alert(this.id);  }</script>

这段代码弹出来的是undefined。

这种设置方式是通过调用全局函数来进行的,这时this指向的是window,而非这个button的调用者,可以通过输出console.log(this==window);来进行验证

第三种方式(调用函数)

<input type="button" id="btn3" value="测试" /><script type="text/javascript">   var btn3 = document.getElementById("btn3");        btn3.onclick = function () {          alert(this.id);        };</script>

这段代码弹出来的是btn3。

这种事件处理程序在事件目标上定义,所以它们作为这个对象的方法来调用(但是下面在IE里面有个例外)。这就是说在事件处理程序内,this关键字指的是事件目标。

当使用addEventListener()注册时,调用的处理程序使用事件目标作为它们的this值。但是对于还用attachment()注册的处理程序作为函数调用,它们的this值是全局(window)对象。就是说的第四中方式

第四种方式(通过addEventListener和attachment):

<input type="button" id="btn3" value="测试" onclick="test()" /> var btn = document.getElementById("btn3");        var handler = function () { console.log(this.id); };        if (btn.addEventListener) {          console.log("addEventListener");          btn.addEventListener("click", handler, false);        }        else if (btn.attachEvent) {//IE9之前的版本          console.log("attachEvent");          btn.attachEvent("onclick",handler);        }

在IE5-IE8 版本输出的是undefined。(此时调用的是attachement)

IE9以后的版本输出的btn3.(修复了上面的问题,增加了通用的addEventListener)。

如果想修复IE5-8里面的那个问题,可以使用下面的方法。

/**target:目标对象,button之类的*type:"click"字符串事件名称,无需带on*handler:调用的处理程序*/function addEvent(target,type,handler){ if (target.addEventListener) {          target.addEventListener(type, handler, false);        }        else if (target.attachEvent) {//IE9之前的版本                    btn.attachEvent("on"+type,function(event){            return hanlder.call(target,event);//把处理程序作为事件目标的方法调用,更改this指向。          });        }}

以上所述是小编给大家介绍的在JS中通过四种设置事件处理程序的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

相关文章

怎么压缩PPT2010中的大小压缩PPT20

怎么压缩PPT2010中的大小压缩PPT20

压缩,方法,步骤,压缩图片,大小,  当我们精心制作好一个PPT演示文档后,由于里面有很多高精度的图片,而导致整体文件大小偏大,动则几十兆,甚至几百兆,无法通过邮件发出。即便导出为PDF格式仍然很大,无法实现文件上传。在这种情况下,一个很简单的设…

在Word2007文档中如何设置段落间距

在Word2007文档中如何设置段落间距

设置,文档,间距,段落,如何设置,  段落间距是指段落与段落之间的距离,在Word2007中,用户可以通过多种渠道设置段落间距。以下是小编为您带来的关于在Word2007设置段落间距,希望对您有所帮助。在Word2007设置段落间距方法1:在Word2007文档窗口…

怎么在excel的菜单栏中添加自动求

怎么在excel的菜单栏中添加自动求

菜单,步骤,栏中,按钮,电脑软件,  Excel作为办公人员常用的软件之一,获得了世界范围的推广和使用。Excel软件依靠其强大的功能,成为一款快速、有效处理函数和公式的优秀软件。在Excel2003表格中想自动求和,不知道选项在哪?遇到这样的事情,也…

js 数字、字符串、布尔值的转换方

js 数字、字符串、布尔值的转换方

转换方法,数字,字符串,必看,布尔值,1、转换为字符串'' + 10 === '10'; // true将一个值加上空字符串可以轻松转换为字符串类型。2、字符串转换为数字+'010' === 10Number('010') === 10parseInt('010', 10) === 10 // 用来转换为…

js中字符型和数值型数字的互相转化

js中字符型和数值型数字的互相转化

方法,字符,数字,必看,数值,数值型的数字字符型数字之间如何互相转化呢,其实有个很简便的方法:比如字符串”123.45”和数值型123.45。字符串型只要在前面加个+好就可以了。数值型只要在后面加个空字符串”“就可以了。上图:以上这篇js中字符型…

手机QQ空间秀取消的方法

手机QQ空间秀取消的方法

空间,方法,取消,电脑软件,QQ,  新版手机qq空间新增了空间秀功能,许多朋友设置后就后悔了,那么手机qq空间秀怎么取消。今天小编就为大家带来手机qq空间秀关闭的方法,欢迎大家前来阅读!手机QQ空间秀怎么取消?  打开QQ空间选择&ldquo;我的空…

2010版ppt怎么将幻灯片文件压缩

2010版ppt怎么将幻灯片文件压缩

方法,文件压缩,压缩,幻灯片,图片大小,  当我们精心制作好一个PPT演示文档后,由于里面有很多高精度的图片,而导致整体文件大小偏大,动则几十兆,怎么办?下面小编马上就告诉大家压缩PPT2010中的图片大小的方法,希望看完本教程的朋友都能学会并运…

什么是PHP文件?如何打开PHP文件?

什么是PHP文件?如何打开PHP文件?

文件,电脑软件,PHP,在平时我们可能会碰到过php文件,可是很多用户不知道php文件是什么文件?也不知道怎么打开php文件?为了满足一些用户的好奇心,小编现在就给大家讲解php文件以及如何打开php文件的方法。1、PHP文件是什么?PHP(Hypertext Prepr…

ps怎样给美女嘴唇添加亮彩效果?

ps怎样给美女嘴唇添加亮彩效果?

嘴唇,效果,美女,电脑软件,ps,  ps怎样给美女嘴唇添加亮彩效果?运用PHOTOSHOP软件,可以很简单的给美女嘴唇添加亮彩效果,下面和小编一起来看看具体步骤吧。ps给美女嘴唇添加亮彩效果步骤:效果图:1、先铺色,这里用喷枪2、用白色或者肤色,把靠近嘴…

WPS2017如何把演示文稿导出为视频W

WPS2017如何把演示文稿导出为视频W

步骤,演示文稿,视频,入口,详情,  自从wps2017推出后,很多网友跃跃欲试。有几个特色功能想必大家都想了解。今天小编我带领你去领略一下,wps2017演示如何把一个演示文稿输出为视频。由于wps2017可以打开任何PPT文档,所以wps2017可以完全解决…

Excel中进行组合图表的操作技巧

Excel中进行组合图表的操作技巧

组合,图表,操作技巧,操作步骤,电脑软件,  如何进行实现Excel组合图表的呢?具体该怎么去进行操作的呢?今天,小编就教大家在Excel中进行组合图表的操作技巧。Excel中进行组合图表的操作步骤首先制作基础表格,以每月花销举例。插入图表,并在&ld…

WPS文字如何放大文档设置页面大小

WPS文字如何放大文档设置页面大小

文档,文字,设置,大小,页面,  WPS文字想必大家都有使用过吧,如遇到打开文档后,发现文档的内容字体太小,看不清楚,可以在视图菜单中点击显示比例来调节大小。以下是小编为您带来的关于WPS文字放大文档设置页面大小,希望对您有所帮助。WPS文字放…