/*
事件监听器

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. 解决win10无线无故断网,重启才恢复正常的情况【原】

    最初以为是路由器问题 ,但是别人电脑都好好的呀,而且我自己的手机也是好好的能正常上网,所以只能从自身电脑找问题了,目测就是无线网卡出问题了.经过一番百度,原来是win10自动开启了省模式,运行一段时间 ...

  2. 怎样动态地插入不会暴露给用户的JS文件

    也是无意间看见的,以前想过这个问题,但是没多想,今天看到这段代码豁然开朗 (function() { var dynamicScript = document.createElement('scrip ...

  3. POJ3694 Network【连通分量+LCA】

    题意: 一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(注意是要考虑之前连了的边,每次回答是在上一次的基础之上). 思路: 首先运行一次Tarjan ...

  4. MacOs -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

    1解决iterm远程登录主机报错 -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or ...

  5. Nginx实战之让用户通过用户名密码认证访问web站点

    1.Nginx实战之让用户通过用户名密码认证访问web站点 [root@master ~]# vim /usr/local/nginx/conf/extra/www.conf server { lis ...

  6. 挖掘两个Integer对象的swap的内幕

    public class SwapTest { public static void main(String[] args) throws Exception { Integer a = 1, b=2 ...

  7. transition,过渡效果

    语法: transtion:property time change-speed delay. 人话就是:属性(property )在多少秒内(time )通过什么样的速度(change-speed) ...

  8. 一分钟了解contextlib模块

    cobtextlib模块用于简化上下文管理器,其内置装饰漆@contextmanager,我们通过编写一个被contextmanager装饰的generator来简化上下文管理. from conte ...

  9. [转]C++赋值运算符重载函数(operator=)

    写在前面: 关于C++的赋值运算符重载函数(operator=),网络以及各种教材上都有很多介绍,但可惜的是,内容大多雷同且不全面.面对这一局面,在下在整合各种资源及融入个人理解的基础上,整理出一篇较 ...

  10. Check Box、Radio Button、Combo Box控件使用

    Check Box.Radio Button.Combo Box控件使用 使用控件的方法 1.拖动控件到对话框 2. 定义控件对应的变量(值变量或者控件变量) 3.响应控件各种消息 Check Box ...