/*
事件监听器

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. JAVA记录-maven JDK配置和常用操作

    1.pom.xml加入(JDK编译器配置) <build> <finalName>项目名</finalName> <plugins> <plugi ...

  2. rpm打包tomcat

    1.制作rpm包 yum install rpm-build -y 2.创建工作目录 mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 3.准 ...

  3. Code::Blocks代码自动提示设置及常用快捷键

    Code::Blocks代码自动提示设置及常用快捷键(适用windows和linux) 1)以下需要设置的地方均在Settings->Editor...弹出的对话框中. 2)不少命令都可针对当前 ...

  4. JavaScript数组倒序函数reverse()

    左边为原数组,右边为array.reverse()的结果: 函数很简单,但是 var temp = ChartConfig.getMonthData(); $scope.monthList = tem ...

  5. 实现一个string类

    实现要实现:构造,析构,拷贝构造,赋值的功能 1. 提供构造函数 string(), string(const string & str),string(const  char * str), ...

  6. bzoj 4184: shallot (线段树维护线性基)

    题面 \(solution:\) 这一题绝对算的上是一道经典的例题,它向我们诠释了一种新的线段树维护方式(神犇可以跳过了).像这一类需要加入又需要维护删除的问题,我们曾经是遇到过的像莫对,线段树... ...

  7. 一步步使用Code::Blocks进行设置断点调试程序

    一.调试之前要做的工作 首先,我们要确保Code::Blocks的配置正确,调试工作才能进行得更顺利 为此,我们需要生成调试符号.调试符号可以让调试器知道代码的哪一行正在执行,这样你就可以知道程序运行 ...

  8. awk技巧【转】

    转自 awk技巧(如取某一行数据中的倒数第N列等) - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/8481965.html 使用awk取某一行数据 ...

  9. 移动端rem单位适配使用

    1.适配方法 //缩放比例!function(e,t){function i(){o=1,e.devicePixelRatioValue=o,s=1/o;var t=a.createElement(& ...

  10. openstack新版本ocata的接口改动

    新增placement API,部分替代了原先的nova api的部分功能接口 可在此页面查看API详情及示例:https://specs.openstack.org/openstack/nova-s ...