/*
事件监听器

addEventListener()
removeEventListener()

传统事件绑定:
1、重复添加会,后添加的后覆盖前面的。
*/

示例代码中的html结构:

<body>
<button id = "btn1">按钮</button>
</body>

//代码示例

            window.onload = function(){
//传统事件绑定
var oBtn = document.getElementById('btn1');
oBtn.onclick = function(){
alert('hello world');
} //此处省略100行代码 oBtn.onclick = function(){
alert('world hello');
}
}

/*上面的结果是下面的oBtn.onclick事件会覆盖到上面的oBtn.onclick事件
最后页面上输出的结果也是 world hello;*/

//怎么才能让他两个事件都存在呢?这里我们要用到事件监听器
//addEventListener()
//removeEventListener()
/*
事件监听器

addEventListener()
格式:
node.addEventListener(事件类型, 函数_要执行的匿名函数, false)
第三参数:false 事件冒泡 true 事件捕获

removeEventListener()
格式:
node.removeEventListener(事件类型, 函数名);

传统事件绑定:
1、重复添加会,后添加的后覆盖前面的。
*/

//代码示例:

            window.onload = function(){
//事件监听绑定
var oBtn = document.getElementById('btn1');
oBtn.addEventListener ('click', function(){
alert('hello world');
}, false) //此处省略100行代码
//再添加一个监听事件用来监听click 点击
oBtn.addEventListener ('click', function(){
alert('world hello'); }, false)
}

//这样就不会发生重叠现象,点击按钮时会 弹出 hello world 和 world hello;

//我再来看一下移除事件监听 removeEventListener,首先先看一下传统的移除事件

//我们修改html结构如下

<body>
<button>添加事件</button>
<button>按钮</button>
<button>删除事件</button>
</body>

//具体演示代码如下

            window.onload = function(){
//获取3个button按钮元素节点
var aBtns = document.getElementsByTagName('button');
//给第二个按钮添加一个传统的点击事件
aBtns[1].onclick = function(){
alert('原有的事件');
}
//当点击第一个按钮的时候再给第二个按钮添加一个传统的点击事件
aBtns[0].onclick = function(){
aBtns[1].onclick = show;
}
//点击第三个按钮的时候,将第二按钮点击事件赋值成 null 即为空
aBtns[2].onclick = function(){
aBtns[1].onclick = null;
} //方便演示的函数
function show(){
alert('hello world');
} }

//在演示过程中,我们可以看出每次都是相互覆盖的关系,刚开始的时候 点击第二个按钮 会弹出 原有的事件, 我们再去点一下 第一个按钮 后
//再回来点 第二个按钮 这时的内容 就变成了 hello world 说明第二次添加的事件 把原有的事件就覆盖了,点击 第三个按钮 也是同样的道理
//所在 再次点击 第二个时 就什么也不弹出来。

//我们再来看一下移除事件监听 removeEventListener与上面的区别,

//代码如下

            window.onload = function(){
var aBtns = document.getElementsByTagName('button'); aBtns[1].addEventListener('click', function(){
alert('原有的事件');
}, false); aBtns[0].onclick = function(){
aBtns[1].addEventListener('click', show, false);
} aBtns[2].onclick = function(){
aBtns[1].removeEventListener("click", show);
}
} function show(){
alert('hello world');
}

//可以看出用事件监听的方法可以不覆盖原有的事件,还能自由可控制,移除添加的事件。

/*但是这种方法 是ie9 以后才出来的,所以ie9以前不兼容,但是他给我们了两个功能一样的函数,

IE下
attachEvent()
格式
只有两个参数
attachEvent(on事件类型, 函数_要执行的匿名函数或函数)
detachEvent(on事件类型, 函数_要取消的匿名函数或函数)*/

/*所以我们封装兼容所有浏览器的 监听事件方法(函数)*/

        /*---------封装兼容所有浏览器的 监听事件方法(函数--------------*/
//封装添加监听事件的函数
// 形参说明
// obj 是要添加的元素节点对象
// event 是事件类型(是click还是mousedown等)
// func 是事件触发后要执行的函数
function addEvent(obj, eventType, func){
if(obj.addEventListener){
obj.addEventListener(eventType, func, false);
}else{
obj.attachEvent("on" + eventType, func);
}
}
//封装移除监听事件的函数
function removeEvent(obj, eventType, func){
if(obj.removeEventListener){
obj.removeEventListener(eventType, func);
}else{
obj.detachEvent("on" + eventType, func);
}
} /*---------封装兼容所有浏览器的 监听事件方法(函数)end--------------*/

/*总结
传统事件绑定可以满足我们对于事件绑定的大部分需求。

事件监听器可以补充我们传统事件绑定不能满足的更高的要求。

*/

js事件监听的更多相关文章

  1. js 事件监听 冒泡事件

    js 事件监听  冒泡事件   的取消 [自己写框架时,才有可能用到] <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitiona ...

  2. js 事件监听 兼容浏览器

    js 事件监听 兼容浏览器   ie 用 attachEvent   w3c(firefox/chrome)  用 addEventListener 删除事件监听 ie 用 detachEven   ...

  3. js事件监听机制(事件捕获)总结

    在前端开发过程中我们经常会遇到给页面元素添加事件的问题,添加事件的js方法也很多,有直接加到页面结构上的,有使用一些js事件监听的方法,由于各个浏览器对事件冒泡事件监听的机制不同,le浏览器只有事件冒 ...

  4. js事件监听机制(事件捕获)

    在前端开发过程中我们经常会遇到给页面元素添加事件的问题,添加事件的js方法也很多,有直接加到页面结构上的,有使用一些js事件监听的方法,由于各个浏览器对事件冒泡事件监听的机制不同,le浏览器只有事件冒 ...

  5. js 事件监听封装

    var eventUtil={//添加句柄 //element,节点 //type,事件类型 //handler,函数 addHandler:function(element,type,handler ...

  6. js事件监听-addEventListener (w3c标准) 和 attachEvent(ie)

    研究了一个小时,没看懂这两个属性 window.onload = function(){ var oDiv = document.getElementById("J_myDiv") ...

  7. 前端学习历程--js事件监听

    一.事件监听使用场景 1.事件触发多个方法的时候,后一个方法会把前一个方法覆盖掉. window.onload = function(){  var btn = document.getElement ...

  8. Js事件监听封装(支持匿名函数)

    先看demo:http://liutian1937.github.io/demo/EventListen.html/*绑定事件与取消绑定*/ var handleHash = {}; var bind ...

  9. (转载)JS事件监听 JS:attachEvent和addEventListener使用方法

    (转载)http://www.chhua.com/web-note146 attachEvent和addEventListener使用方法 Js代码 <html> <head> ...

随机推荐

  1. vue2.0 之文本渲染-v-html、v-text

    vue2.0 之文本渲染-v-html.v-text 1.index.html代码 <!DOCTYPE html> <html> <head> <meta c ...

  2. Java_JDBC一般写法

    JDBC是Java DataBase Connectivity,Java程序访问数据库的标准接口. 如果是maven工程先加入依赖的jar包: <dependency> <group ...

  3. CF786B Legacy && 线段树优化连边

    线段树优化连边 要求点 \(x\) 向区间 \([L, R]\) 连边, 一次的复杂度上限为 \(O(n)\) 然后弄成线段树的结构 先父子连边边权为 \(0\) 这样连边就只需要连父亲就可以等效于连 ...

  4. Unity触发器有时失效的原因

    unity里面的触发器有时候不起作用,我原以为是失效了.其实是这样的,所谓触发器就是被触发的物体,例如你子弹打小怪.如果把子弹设置成触发器那么是不成功的,因为子弹是主动的啊,那么把小怪设置成触发器了呢 ...

  5. vue常用UI组件

    Mint UI 项目主页:http://mint-ui.github.io/#!/zh-cn demo:http://elemefe.github.io/mint-ui/#/ github地址:htt ...

  6. oracle乱码记录

    plsql中显示正常,查询到的结果乱码 1.获得服务端编码 select * from nls_database_parameters where parameter ='NLS_CHARACTERS ...

  7. 第17月第7天 iOS 数组越界,防Crash处理

    1. 上面方法已经可以避免crash,为了避免冗余的代码,写一个NSArray的分类,利用runtime替换NSArray的对象方法objectAtIndex:,在这里进行判断,捕获异常: #impo ...

  8. The folder can’t be opened because you don’t have permission to see its contents.

    1 自己在windows上面copy过去的文件夹,在Mac下面无法查看 一开始以为是windows文件的权限问题,然后 自己赋予了everyone所有的权限,结果在Mac上面还是无法打开文件夹 2 最 ...

  9. UVA565 Pizza Anyone? (状态压缩,搜索)

    UVA565 Pizza Anyone? 大致题意:现在你要做一份披萨,有A到P共16种食材.现在给你1~12个人对这个披萨加入不同食材的条件(只包含想要和不想要两种)(加号是想要,减号是不想要,不一 ...

  10. Springboot使用FastJson后,接口返回中文乱码的问题解决。

    哎,天下文章一大抄,到处都是一模一样的教你怎么替换掉jackson成fastjson的,可后续中文乱码网上居然没一篇文章.翻了一会源码还是写个文章共享下吧.免得后来人又浪费时间折腾. 在springb ...