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触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件 ...
随机推荐
- java HTTP请求 DefaultHttpClient is deprecated
最近在使用Apache的httpclient的时候,maven引用了最新版本4.3,发现Idea提示DefaultHttpClient等常用的类已经不推荐使用了,之前在使用4.2.3版本的时候,还没有 ...
- ZF-关于海南的增删改需求
,) ,,) ,) '); select * from SYS_ORGAN where org_name = '区教体局' update sys_organ set org_name = '综合行政执 ...
- linux下sed命令对文件执行文本替换
让我们看一下 sed 最有用的命令之一,替换命令.使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换.下面是该命令最基本用法的示例: $ sed -e ‘s/foo/bar/’ myfi ...
- 转:WebTest的常见问题与解决
WebTest的常见问题与解决录制好一个WebTest,加上各种规则,编辑后运行并不会像我们想象的那么顺利成功,往往会碰到很多问题,运行不成功的情况比较多,这样我们就遇到了如何解决这些问题的情形.1. ...
- Base64编码与图片互转
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- Android 之 ServiceManager与服务管理
ServiceMananger是android中比较重要的一个进程,它是在init进程启动之后启动,从名字上就可以看出来它是用来管理系统中的service.比如:InputMethodService. ...
- HDU 1828 POJ 1177 Picture
矩形周长并 POJ上C++,G++都能过,HDU上C++过了,G++WA ,不知道为什么 #include<cstdio> #include<cstring> #include ...
- CDOJ 1273 God Qing's circuital law
暴力枚举+idea.做的时候mod写错了,写成了1000000009,找了两个多小时才发现...... a[1],a[2],a[3]....a[N] b[1],b[2],b[3]....b[N] 首先 ...
- CDOJ 1269 ZhangYu Speech
预处理打表,sum[i][j]表示1.....i这些数字中 j 有几个.然后就很好处理询问了. #include<stdio.h> #include<math.h> #incl ...
- clip实现圆环进度条
效果主要通过clip和transform:rotate实现 把圆环分为左右两个部分,通过角度旋转对图片剪切旋转角度<=180度的时候之旋转右边,当大于180度时右边固定旋转180度的同时旋转左边 ...