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触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件 ...
随机推荐
- 关于submit与document.form1.submit();这2个提交的区别
首先要知道 一个是按钮提交 一个是在js函数里写代码 document.form1.submit() 提交 区别如下: 从使的方式及效主要有二点区别吧.一.使用submit()提交时,表单中不能存在s ...
- php通过token验证表单重复提交
PHP防止重复提交表单 2016-11-08 轻松学PHP 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后 ...
- UIView你知道多少
转载自:http://www.cnblogs.com/likwo/archive/2011/06/18/2084192.html 曾经有人这么说过,在iphone里你看到的,摸到的,都是UIVie ...
- 在java中和javascript中过滤掉类似于img形式的字符串,从而不显示图片
1:javascript过滤掉<img></img>和<img />形式的字符串 <!DOCTYPE html PUBLIC "-//W3C//DT ...
- python之路:进阶 二
c = collections.Counter( Counter({ b = collections.Counter( b.update(c) Counter({ Counter({ ...
- 拓扑排序的经典题目 UVA1572
紫书172的例题: 题目大意:有n种正放形,每种正方形的数量可视为无限多.已知边与边之间的结合规则,而且正方形可以任意旋转和反转,问这n中正方形是否可以拼成无限大的图案 思路:首先因为是要无穷大,所以 ...
- 如何在项目中引入 #include .h、.lib、 .dll、.cpp (转)
源:http://blog.csdn.net/vippolka/article/details/8552735 在项目中引入.h..lib和dll.以及.cpp 1..h的引入 解决办法1:把 XX ...
- Ubuntu 12.04下安装thrift 0.9
Thrift这里就不介绍了,只说一句--Facebook很牛逼. 我这里安装Thrift主要是为Accumulo数据库作准备,所以java语言为必选项. 具体安装参考官方Apache Thrift R ...
- webpack.config.js 参数简单了解
webpack.config.js文件通常放在项目的根目录中,它本身也是一个标准的Commonjs规范的模块. var webpack = require('webpack'); module.exp ...
- AMQP协议学习
参考这个:http://kb.cnblogs.com/page/73759/ 写的挺好 AMQP协议是一种二进制协议,提供客户端应用与消息中间件之间异步.安全.高效地交互.从整体来看,AMQP协议可划 ...