全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入理解在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中通过四种设置事件处理程序的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# js设置事件处理程序  # JavaScript中的事件处理程序  # JS事件流与事件处理程序实例分析  # JavaScript常见事件处理程序实例总结  # JavaScript事件处理程序详解  # JavaScript的事件代理和委托实例分析  # js中的事件委托或是事件代理使用详解  # JavaScript事件代理和委托详解  # js事件委托和事件代理案例分享  # JavaScript通过事件代理高亮显示表格行的方法  # JS实现为动态添加的元素增加事件功能示例【基于事件委托】  # javascript事件委托的方式绑定详解  # JS事件处理机制及事件代理(事件委托)实例详解  # 的是  # 弹出  # 而非  # 这段  # 四种  # 转换为  # 小编  # 是一个  # 是在  # 有个  # 在此  # 推荐使用  # 可以通过  # 给大家  # 可以使用  # 任何一个  # 提供一个  # 它会  # 指的是  # 还用 


相关文章: 香港服务器如何优化才能显著提升网站加载速度?  建站之星后台管理系统如何操作?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  c# 在高并发场景下,委托和接口调用的性能对比  如何选择最佳自助建站系统?快速指南解析优劣  常州自助建站费用包含哪些项目?  建站之星如何防范黑客攻击与数据泄露?  如何通过建站之星自助学习解决操作问题?  如何在云服务器上快速搭建个人网站?  如何在IIS中新建站点并配置端口与IP地址?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  建站为何优先选择香港服务器?  焦点电影公司作品,电影焦点结局是什么?  微信推文制作网站有哪些,怎么做微信推文,急?  如何用虚拟主机快速搭建网站?详细步骤解析  如何在万网主机上快速搭建网站?  如何破解联通资金短缺导致的基站建设难题?  如何通过免费商城建站系统源码自定义网站主题与功能?  如何通过FTP空间快速搭建安全高效网站?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  如何通过NAT技术实现内网高效建站?  青岛网站建设如何选择本地服务器?  C#怎么创建控制台应用 C# Console App项目创建方法  潮流网站制作头像软件下载,适合母子的网名有哪些?  建站之星价格显示格式升级,你的预算足够吗?  如何用AWS免费套餐快速搭建高效网站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  自助网站制作软件,个人如何自助建网站?  如何挑选优质建站一级代理提升网站排名?  建站之星如何快速生成多端适配网站?  如何生成腾讯云建站专用兑换码?  英语简历制作免费网站推荐,如何将简历翻译成英文?  C#怎么使用委托和事件 C# delegate与event编程方法  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  如何用景安虚拟主机手机版绑定域名建站?  如何正确下载安装西数主机建站助手?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Python路径拼接规范_跨平台处理说明【指导】  网页设计与网站制作内容,怎样注册网站?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Java解压缩zip - 解压缩多个文件或文件夹实例  如何选择香港主机高效搭建外贸独立站?  建站主机选购指南:核心配置优化与品牌推荐方案  已有域名能否直接搭建网站?  香港服务器租用每月最低只需15元?  简历在线制作网站免费版,如何创建个人简历? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。