实例讲解javascript注册事件处理函数


Posted in Javascript onJanuary 09, 2016

事件是javascript的核心内容,它的重要性这里就不多介绍了。触发事件之后就需要有事件处理函数去处理,例如我们可以定义当点击一个按钮之后,将一个div的背景设置为绿色,那么就先看一下如何实现此效果,代码实例如下:

<html> 
<head> 
<meta charset=" utf-8"> 
<title>javascript如何注册事件处理函数</title>
<style type="text/css">
#mydiv{
 width:100px;
 height:100px;
 background-color:red;
}
</style>
<script type="text/javascript"> 
function changebg(){
 var mydiv=document.getElementById("mydiv");
 mydiv.style.backgroundColor="green";
}
</script>
</head>
<body>
 <div id="mydiv"></div>
 <button id="bt">点击查看效果</button> 
</body>
</html>

在以上代码中,点击按钮就会将div的背景颜色设置为绿色,这是因为代码为按钮的onclick事件注册了事件处理函数,此函数可以将div的背景颜色设置为绿色。下面就结合实例简单介绍一下如何为对象的事件注册事件处理函数:
方式一:
直接在HTML代码中注册事件处理函数,也就是直接通过HTML属性来设置事件处理函数,事件处理函数要执行的代码就是HTML的属性值,在文章的开头就是使用的此方式。优缺点如下:

  • 1.容易理解,使用简单。
  • 2.各主流浏览器都支持此方式。
  • 3.与HTML代码混合在一起,使页面十分的繁杂,不符合表现与内容分离的原则。
  • 4.只能够在同一个对象注册一个相同类型的事件处理函数。

方式二:
事件句柄方式,所谓的事件句柄也就是事件处理函数,指定对象的指定事件对应一个事件句柄。使用此种方式注册事件处理函数,首先要获得对象的引用,然后将事件句柄赋值给对象的对应的事件处理函数属性即可。其实方式一也是事件句柄方式的一种。
代码实例如下:

<html> 
<head> 
<meta charset=" utf-8"> 
<title>javascript如何注册事件处理函数</title>
<style type="text/css">
#mydiv{
 width:100px;
 height:100px;
 background-color:red;
}
</style>
<script type="text/javascript"> 
window.onload=function(){
 var mydiv=document.getElementById("mydiv");
 var bt=document.getElementById("bt");
 bt.onclick=function(){
  mydiv.style.backgroundColor="green";
 }
}
</script>
</head>
<body>
 <div id="mydiv"></div>
 <button id="bt">点击查看效果</button>
</body>
</html>

以上代码中,首先使用document.getElementById("bt")获得按钮对象的引用,然后将事件句柄(事件处理函数)赋值给按钮对象的onclick事件属性,这样当点击按钮时就会触发onclick事件,进而执行事件句柄中的代码。优缺点如下:

  • 1.简单容易理解。
  • 2.个浏览器都支持。
  • 3.只能够在同一个对象注册一个相同类型的事件处理函数。

方式三:
是一种更为高级的事件注册方式,那就是事件监听器,这种方式解决了在指定对象只能注册一个指定类型事件的处理函数问题。不过存在一定的兼容性问题,下面分别介绍一下:
1).IE浏览器:
在IE浏览器中可以使用attachEvent()和detachEvent()方法为指定对象注册事件处理函数和删除注册的事件处理函数。
语法格式如下:
element.attachEvent("onevent",eventListener)
此函数具有两个参数,第一个参数是事件类型的名称,第二个参数就是要注册的事件处理函数。
代码实例如下:

<html> 
<head> 
<meta charset=" utf-8"> 
<title>javascript如何注册事件处理函数</title>
<style type="text/css">
#mydiv{
 width:100px;
 height:100px;
 background-color:red;
}
</style>
<script type="text/javascript"> 
window.onload=function(){
 var mydiv=document.getElementById("mydiv");
 var bt=document.getElementById("bt");
 
 bt.attachEvent("onclick",changebg);
 
 function changebg(){
  mydiv.style.backgroundColor="green";
 }
}
</script>
</head>
<body>
 <div id="mydiv"></div>
 <button id="bt">点击查看效果</button>
</body>
</html>

以上代码使用attachEvent()函数为按钮注册onclick事件处理函数,不过只能够在IE浏览器中有效。使用detachEvent()函数可以解除原来注册的事件处理函数,语法格式如下:
element.detachEvent("onevent",eventListener)
格式和attachEvent()函数式一样的。
特别说明:第一个参数的必须带有on,例如点击事件就要写成"onclick"。
2).标准浏览器:
在标准浏览器中(包括IE9和IE9以上浏览器),要使用addEventListener()和removeEventListener()函数注册和删除注册处理函数。
语法格式如下:
element.addEventListener('event', eventListener, useCapture);
此函数具有三个参数,第一个参数是事件类型名称,第二个参数就是要注册的事件处理函数,第三个函数规定此处理函数是在事件传递过程中的捕获阶段被调用还是冒泡阶段被调用,在默认条件下,此属性值为false么也就是在冒泡阶段调用事件处理函数。
特别说明:第一个参数不能够带有on,例如点击事件不能写为"onclick",而要写成"click"。
代码实例如下:

<html> 
<head> 
<meta charset=" utf-8"> 
<title>javascript如何注册事件处理函数</title>
<style type="text/css">
#mydiv{
 width:100px;
 height:100px;
 background-color:red;
}
</style>
<script type="text/javascript"> 
window.onload=function(){
 var mydiv=document.getElementById("mydiv");
 var bt=document.getElementById("bt");
 
 bt.addEventListener("click",changebg);
 
 function changebg(){
  mydiv.style.backgroundColor="green";
 }
}
</script>
</head>
<body>
 <div id="mydiv"></div>
 <button id="bt">点击查看效果</button>
</body>
</html>

以上代码在IE9和IE9以上或者其他标准浏览器中,点击按钮可以将div的背景颜色设置为绿色。使用removeEventListener()函数可以解除原来注册的事件处理函数,语法格式如下:
element.removeEventListener('event', eventListener, useCapture);
格式和addEventListener()函数式一样的。
跨浏览器注册事件处理函数:
只要加个判断语句即可,代码如下:

var EventUtil={
  //注册
  addHandler: function(element, type, handler){
   if (element.addEventListener){
    element.addEventListener(type, handler, false);
   } else if (element.attachEvent){
    element.attachEvent("on" + type, handler);
   } else {
    element["on" + type] = handler;
   }
  },
  //移除注册
  removeHandler: function(element, type, handler){
   if (element.removeEventListener){
    element.removeEventListener(type, handler, false);
   } else if (element.detachEvent){
    element.detachEvent("on" + type, handler);
   } else {
    element["on" + type] = null;
   }
  }       
 };

以上就是本文的详细内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
基于jquery的动态创建表格的插件
Apr 05 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
Jan 19 Javascript
XMLHttpRequest Level 2 使用指南
Aug 26 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
Angular2 PrimeNG分页模块学习
Jan 14 Javascript
webpack 单独打包指定JS文件的方法
Feb 22 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
Mar 05 Javascript
vue实现局部刷新的实现示例
Apr 16 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
Aug 03 Javascript
在vue中使用image-webpack-loader实例
Nov 12 Javascript
jquery实现穿梭框功能
Jan 19 jQuery
详解javascript事件冒泡
Jan 09 #Javascript
js父页面中使用子页面的方法
Jan 09 #Javascript
jquery调整表格行tr上下顺序实例讲解
Jan 09 #Javascript
实例讲解js验证表单项是否为空的方法
Jan 09 #Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 #Javascript
javascript跑马灯抽奖实例讲解
Apr 17 #Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 #Javascript
You might like
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
理解javascript模块化
2016/03/28 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
详解React 元素渲染
2020/07/07 Javascript
使用matplotlib画散点图的方法
2018/05/25 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
C#笔试题和英文面试题
2013/02/07 面试题
你们项目是如何进行变更控制的
2015/08/26 面试题
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
员工培训邀请函
2014/01/11 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
大学感恩节活动总结
2015/05/05 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL