监听事件的绑定与移除主要是addEventListener和removeEventListener的运用。

addEventListener语法

element.addEventListener(type,handler,false/true)

type:事件类型

handler:事件执行触发的函数

false/true:false为冒泡/ture为捕获,参数是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。

事件捕获:父级元素先触发,子集元素后触发;

事件冒泡:子集元素先触发,父级元素后触发;

一般的绑定事件,都是采用冒泡方式,也就是使用false

removeEventListener语法

element.removeEventListener(type,handler,false/true)

参数值含义和上述一样。

接下来用例子进一步理解监听事件的绑定与移除

例1:

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<input type="button" value="test1" id="btn1">
<input type="button" value="test2" id="btn2">
<script>
var btn1=document.getElementById("btn1");/*实名函数*/
var count=0;
var handle1=function() {
alert(count++);
if (count == 3) {
alert("事件结束")
btn1.removeEventListener("click",handle1,false);
}
}
btn1.addEventListener('click',handle1,false); var btn2=document.getElementById("btn2");/*匿名函数*/
btn2.addEventListener("click",function(){
alert(123);
removeEventListener("click",function(){
alert(123)
},false)
},false)
</script>
</body>
</html>

通过匿名函数是无法消除监听事件,只有通过实名函数才能。

例2:利用库来处理事件的绑定和移除会更加方便

(1)js事件的绑定与移除库

 /**
* Created by asus on 2016/11/1.
*/
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*/
removeHandler:function(element,type,handler) { /*Chrome*/
if (element.removeEventListener)
element.removeEventListener(type, handler, false);
else if (element.deattachEvent) { /*IE*/
element.deattachEvent('on' + type, handler);
}
else {
element["on" + type] = null;
/*直接赋给事件*/
}
} };

(2)HTML

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="封装监听事件.js"></script>
</head>
<body>
<input type="button" value="bangding" id="btn">
<input type="button" value="yichu" id="btn1">
<script type="text/javascript">
var btn=document.getElementById("btn");
var bangding=function(){
alert("你好!")
}
EventUtil.addHandler(btn,"click",bangding); var btn1=document.getElementById("btn1");
var yichu=function(){
alert("你好已被移除!");
EventUtil.removeHandler(btn,"click",bangding)
}
EventUtil.addHandler(btn1,"click",yichu)
</script>
</body>
</html>

这就是简单的监听事件的绑定与移除。

js监听事件的绑定与移除的更多相关文章

  1. js 监听事件的叠加和移除

    html DOM元素有很多on开头的监听事件,如onload.onclick等,见DOM事件列表.但是同一种事件,后面注册的会覆盖前面的: window.onresize = function(){ ...

  2. js 多个事件的绑定及移除(包括原生写法和 jquery 写法)

    需要打开控制台查看效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  3. js监听事件 上滑消失下滑出现的效果 触摸与手势事件

    https://www.w3cmm.com/javascript/touch.html //触摸与手势事件连接tinyscrollbar //方法1var _this = $('#fabu');var ...

  4. js监听事件

    //// 监听事件 监听使用各种浏览器 // var p1 = document.getElementById("p1"); //// 监听事件 // eventUtil.addE ...

  5. JS监听事件错误:Uncaught TypeError: xx(函数名)is not a function at HTMLInputElement.onclick

    事件监听一直出错,提示已定义的函数名不是一个函数,折腾了好久才想到,原来是函数名和JS内部关键字重名造成的. 以前也遇到过这种情况,但因为发生的概率比较小,就没太在意,但是这次感觉这方面确实需要注意, ...

  6. egret之移除带参数的监听事件

    this.selectBtn.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onClickNewIndo.bind(this,this.data) ...

  7. node.js绑定监听事件EventEmitter类

    Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下: // 引入 events 模块 var events = r ...

  8. 原 JS监听回车事件

    原 JS监听回车事件 发表于2年前(2014-06-04 10:16)   阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦  ...

  9. js监听input等表单输入框的变化事件oninput

    js监听input等表单输入框的变化事件oninput,手机页面开发中使用到文本框textarea输入字符监听文本框变化计算还可以输入多少字符,如果使用onkeyup的话是无法监听到输入法输入的文本变 ...

随机推荐

  1. day8 文件

     添加中文  需要编码     f = open("123.txt",'w',encoding='utf-8')    字符串转化二进制编码  encode() 1.文件: 计算机 ...

  2. 欧几里得算法(gcd) 裴蜀定理 拓展欧几里得算法(exgcd)

    欧几里得算法 又称辗转相除法 迭代求两数 gcd 的做法 由 (a,b) = (a,ka+b) 的性质:gcd(a,b) = gcd(b,a mod b) int gcd(int a,int b){ ...

  3. google protocol buffer——protobuf的基本使用和模型分析

    这一系列文章主要是对protocol buffer这种编码格式的使用方式.特点.使用技巧进行说明,并在原生protobuf的基础上进行扩展和优化,使得它能更好地为我们服务. 1.什么是protobuf ...

  4. Virtuoso 中如何优化 Library Manager 的显示

    https://www.cnblogs.com/yeungchie/ 主要从 cds.lib 文件去入手. 假设现在想把 Virtuoso 预装的库整理到 preload 分类(库)中. 首先创建一个 ...

  5. 第三方登陆--QQ登陆--单体应用

    从零玩转第三方QQ登陆 下面有源码 前后端分离版本 一样的思路 https://www.cnblogs.com/Yangbuyi/p/13194007.html 第三方GITEE登陆 https:// ...

  6. 理解C#中的ConfigureAwait

    原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获 ...

  7. 使用 codeblocks 编写C++ udp组播程序遇到的问题

    编译错误 会出现好多undefined reference to'WSAStartup to@8之类的错误,都是undefind开头的 解决方法: Settings -> Compiler se ...

  8. TypeScript 安装及基础运行环境搭建

    安装 TypeScript npm install -g typescript 安装成功后,命令行输入 tsc -v 命令提示当前安装的 TypeScript 版本: 出现版本号即安装成功. 使用 V ...

  9. 进阶6:连接查询 一、sql92标准

    #进阶6:连接查询/*含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行 发生原因:没有有效的连接条件如何避免:添加有效的连接条 ...

  10. Ceph Luminous手动解决pg分布不均衡问题

    原文链接: https://www.jianshu.com/p/afb6277dbfd6 1.设置集群仅支持 Luminous(或者L之后的)客户端 具体命令: ceph osd set-requir ...