js事件监听器用法实例详解-注册与注销监听封装
本文实例讲述了js事件监听器用法。分享给大家供大家参考。具体分析如下:
1、当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆盖掉,也就是说,在对象的onclick事件发生时,只会执行最后绑定的方法。而用事件监听则不会有覆盖的现象,每个绑定的事件都会被执行。如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
window.onload = function(){ var btn = document.getElementById("yuanEvent"); btn.onclick = function(){ alert("第一个事件"); } btn.onclick = function(){ alert("第二个事件"); } btn.onclick = function(){ alert("第三个事件"); } } |
最后只输出:第三个事件,因为后一个方法都把前一个方法覆盖掉了。
原生态的事件绑定函数addEventListener:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
var eventOne = function(){ alert("第一个监听事件"); } function eventTwo(){ alert("第二个监听事件"); } window.onload = function(){ var btn = document.getElementById("yuanEvent"); //addEventListener:绑定函数 btn.addEventListener("click",eventOne); btn.addEventListener("click",eventTwo); } |
输出:第一个监听事件 和 第二个监听事件
2、采用事件监听给对象绑定方法后,可以解除相应的绑定,写法如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
var eventOne = function(){ alert("第一个监听事件"); } function eventTwo(){ alert("第二个监听事件"); } window.onload = function(){ var btn = document.getElementById("yuanEvent"); btn.addEventListener("click",eventOne); btn.addEventListener("click",eventTwo); btn.removeEventListener("click",eventOne); } |
输出:第二个监听事件
3、解除绑定事件的时候一定要用函数的句柄,把整个函数写上是无法解除绑定的。
错误写法:
|
1
2
3
4
5
6
|
btn.addEventListener("click",function(){ alert(11); }); btn.removeEventListener("click",function(){ alert(11); }); |
正确写法:
|
1
2
|
btn.addEventListener("click",eventTwo); btn.removeEventListener("click",eventOne); |
总结:对函数进行封装后的监听事件如下,兼容各大主流浏览器。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/* * addEventListener:监听Dom元素的事件 * * target:监听对象 * type:监听函数类型,如click,mouseover * func:监听函数 */function addEventHandler(target,type,func){ if(target.addEventListener){ //监听IE9,谷歌和火狐 target.addEventListener(type, func, false); }else if(target.attachEvent){ target.attachEvent("on" + type, func); }else{ target["on" + type] = func; } } /* * removeEventHandler:移除Dom元素的事件 * * target:监听对象 * type:监听函数类型,如click,mouseover * func:监听函数 */function removeEventHandler(target, type, func) { if (target.removeEventListener){ //监听IE9,谷歌和火狐 target.removeEventListener(type, func, false); } else if (target.detachEvent){ target.detachEvent("on" + type, func); }else { delete target["on" + type]; } } var eventOne = function(){ alert("第一个监听事件"); } function eventTwo(){ alert("第二个监听事件"); } window.onload = function(){ var bindEventBtn = document.getElementById("bindEvent"); //监听eventOne事件 addEventHandler(bindEventBtn,"click",eventOne); //监听eventTwo事件 addEventHandler(bindEventBtn,"click",eventTwo ); //监听本身的事件 addEventHandler(bindEventBtn,"click",function(){ alert("第三个监听事件"); }); //取消第一个监听事件 removeEventHandler(bindEventBtn,"click",eventOne); //取消第二个监听事件 removeEventHandler(bindEventBtn,"click",eventTwo); } |
实例:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Event</title> <script type="text/javascript"> function addEventHandler(target,type,func){ if(target.addEventListener){ //监听IE9,谷歌和火狐 target.addEventListener(type, func, false); }else if(target.attachEvent){ target.attachEvent("on" + type, func); }else{ target["on" + type] = func; } } function removeEventHandler(target, type, func) { if (target.removeEventListener){ //监听IE9,谷歌和火狐 target.removeEventListener(type, func, false); } else if (target.detachEvent){ target.detachEvent("on" + type, func); }else { delete target["on" + type]; } } var eventOne = function(){ alert("第一个监听事件"); } function eventTwo(){ alert("第二个监听事件"); } window.onload = function(){ var bindEventBtn = document.getElementById("bindEvent"); //监听eventOne事件 addEventHandler(bindEventBtn,"click",eventOne); //监听eventTwo事件 addEventHandler(bindEventBtn,"click",eventTwo ); //监听本身的事件 addEventHandler(bindEventBtn,"click",function(){ alert("第三个监听事件"); }); //取消第一个监听事件 removeEventHandler(bindEventBtn,"click",eventOne); //取消第二个监听事件 removeEventHandler(bindEventBtn,"click",eventTwo); } </script> </head> <body> <input type="button" value="测试" id="bindEvent"> <input type="button" value="测试2" id="yuanEvent"> </body> </html> |
希望本文所述对大家的javascript程序设计有所帮助。
js事件监听器用法实例详解-注册与注销监听封装的更多相关文章
- js事件监听器用法实例详解
这篇文章主要介绍了js事件监听器用法,以实例形式较为详细的分析了javascript事件监听器使用注意事项与相关技巧,需要的朋友可以参考下本文实例讲述了js事件监听器用法.分享给大家供大家参考.具体分 ...
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- 【python库模块】Python subprocess模块功能与常见用法实例详解
前言 这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能.常用函数相关使用技巧. 参考 1. Python subprocess ...
- PHP中__get()和__set()的用法实例详解
php面向对象_get(),_set()的用法 一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__ge ...
- jQuery中on()方法用法实例详解
这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...
- js确认框confirm()用法实例详解
先为大家介绍javascript确认框的三种使用方法,具体内容如下 第一种方法:挺好用的,确认以后才能打开下载地址页面.原理也比较清晰.主要用于删除单条信息确认. ? 1 2 3 4 5 6 7 8 ...
- Python回调函数用法实例详解
本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...
- jquery中attr()与prop()函数用法实例详解(附用法区别)
本文实例讲述了jQuery中attr()与prop()函数用法.分享给大家供大家参考,具体如下: 一.jQuery的attr()方法 jquery中用attr()方法来获取和设置元素属性,attr是a ...
- Oracle触发器用法实例详解
转自:https://www.jb51.net/article/80804.htm. 本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件 ...
随机推荐
- MyBatis基础用法(一)
<select id="getErrorTimes" resultType="Integer"> SELECT ErrorTimes FROM `e ...
- 改变MyEclipse创建JSP时默认的pageEncoding编码
如何改变MyEclipse创建JSP时默认的pageEncoding编码 有时我们需要改变MyEclipse创建JSP时默认的pageEncoding编码,因为也许它默认的编码不是我们想要的,比如我们 ...
- .net remoting 实现通用消息处理窗口
.net remoting 实现通用消息处理窗口 实现机制是制作一个cmd窗口作为信息展示窗口,主程序将需要展示的信息抛出到cmd窗口显示,以此方式做到消息的展示. 以下是cmd窗口的代码,cmd窗体 ...
- JQuery常用动画实现函数
1.上拉.下拉和切换 slideup().slidedown().slideToggle() JQuery里面的切换太吊了,它自带判断当前显示状态,如果为显示就执行隐藏,如果为隐藏就执行显示. 2.淡 ...
- 关于 CentOS 7 里面 普通用户 Ulimit max user processes 值的问题
最近在对tomcat 的一个 项目进行 压测, 普通用户 启动 tomcat 的时候 压力上去以后就会报 java.lang.OutOfMemoryError 的错误, 这种错误 按道理来说都是 系统 ...
- Memcached缓存系统介绍及安装
1.什么是Memcached 1.1.Memcached概述 Memcached是一个免费的开源的.高性能的.具有又分布式内存对象的缓存系统,它通过减轻数据库负载加速动态WEB应用, 1.2.Memc ...
- [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 160913 02:11:21 mysqld_safe mysqld from pid file /tmp/mysql.pid ended
-- :: [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0 -- :: [Warning] InnoDB: New ...
- Nginx 虚拟主机下支持Pathinfo并隐藏入口文件的完整配置
server { listen 80; server_name zuqiu.com; # 设置你的域名 index index.html index.htm index.php; root D:/wn ...
- 三种Dataase Mapping的系统架构
ORM - O/R M - Object/Relational Mapping: A technique/idea used to map objects and thier individual r ...
- php CI 实战教程:如何去掉index.php目录
Windows下自由创建.htaccess文件的N种方法 .htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录.站点的访问控制,当然最多的 ...