大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新......
+------------------------------------------------------------
github:https://github.com/Daotin/Web
微信公众号:Web前端之巅
博客园:http://www.cnblogs.com/lvonve/
CSDN:https://blog.csdn.net/lvonve/
+-----------------------------------------------------------
在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!

一、为元素绑定多个事件

前导:如果一个按钮绑定了多个点击事件,那么点击按钮的时候只会执行最后一个点击事件,前面的点击事件都被覆盖了。那么如何为一个按钮绑定多个相同的事件,并且每个事件都会执行呢?

1、为元素绑定多个事件

<body><input type="button" value="按钮1" id="btn1"><input type="button" value="按钮2" id="btn2"><!-- <div id="dv"></div> --><script src="common.js"></script><script>// 参数有3个// 参数1:事件的类型(事件的名字),不要on// 参数2:事件处理函数(命名函数或者匿名函数)// 参数3:false// 兼容性:chrome,firefox支持,IE8不支持my$("btn1").addEventListener("click", function() {alert("1");},false)my$("btn1").addEventListener("click", function() {alert("2");},false)my$("btn1").addEventListener("click", function() {alert("3");},false)// 参数有2个// 参数1:事件的类型(事件的名字),要on// 参数2:事件处理函数(命名函数或者匿名函数)// 兼容性:chrome,firefox不支持,IE8支持my$("btn2").attachEvent("onclick", function() {alert("4");});my$("btn2").attachEvent("onclick", function() {alert("5");});my$("btn2").attachEvent("onclick", function() {alert("6");});</script>
</body>

绑定事件的方式:

addEventListener: chrome,firefox支持,IE8不支持

attachEvent: chrome,firefox不支持,IE8支持

2、绑定事件兼容代码

<body><input type="button" value="按钮" id="btn"><script src="common.js"></script><script>// 为任意元素添加任意事件function addAnyEventListener(element, type, func) {if(element.addEventListener) {element.addEventListener(type, func, false);} else if(element.attachEvent) {element.attachEvent("on"+type, func);} else {element["on"+type] = func;}}addAnyEventListener(my$("btn"), "click", function() {console.log("事件1");});addAnyEventListener(my$("btn"), "click", function() {console.log("事件2");});addAnyEventListener(my$("btn"), "click", function() {console.log("事件3");});</script>
</body>

my("dv").onclick == my$("dv")["onclick"]

3、绑定事件的区别

  • 方法名不同;

  • 参数个数不同,addEventListener有三个参数,attachEvent有两个参数;

  • addEventListener中事件的类型没有 on,attachEvent中事件的类型有on;

  • chrome,firefox 支持 addEventListener ,IE8不支持;

chrome,firefox 不支持 attachEvent ,IE8支持;

  • 事件中的 this 不同,addEventListener 中的 this 是当前绑定的对象;

attachEvent 中的 this 是 window。


二、为元素解绑事件

1、三种方式

1.1、方式一

如果使用 元素.onclick = function(){}; 的方式绑定对象的话,解绑的方式为 元素.onclick = null;

1.2、方式二

如果使用 元素.addEventListener("click", f1, false); 的方式绑定对象的话,解绑方式为 元素.removeEventListener("click", f1, false);

注意:这里面不能使用匿名函数,因为需要同一个事件处理函数,而两个匿名函数是两个不同的函数,所以需要使用命名函数。

1.3、方式三

如果使用 元素.attachEvent("onclick", f1); 的方式绑定对象的话,解绑方式为 元素.detachEvent("onclick", f1);

2、解绑事件兼容代码

// 为任意元素绑定任意事件
function addAnyEventListener(element, type, func) {if(element.addEventListener) {element.addEventListener(type, func, false);} else if(element.attachEvent) {element.attachEvent("on"+type, func);} else {element["on"+type] = func;}
}// 为任意元素解绑任意事件
function removeAnyEventListener(element, type, funcName) {if(element.removeEventListener) {element.removeEventListener(type, funcName, false);} else if(element.detachEvent) {element.detachEvent("on"+type, funcName);} else {element["on"+type] = null;}
}

示例:

<body><input type="button" value="按钮" id="btn1"><input type="button" value="按钮" id="btn2"><script src="common.js"></script><script>function f1() {console.log("第一个");}function f2() {console.log("第二个");}addAnyEventListener(my$("btn1"), "click", f1);addAnyEventListener(my$("btn1"), "click", f2);my$("btn2").onclick = function () {removeAnyEventListener(my$("btn1"), "click", f1);}</script>
</body>

从零开始学 Web 之 DOM(六)为元素绑定与解绑事件相关推荐

  1. 从零开始学 Web 系列教程

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新-- github:https://github.com/Daotin/Web 微信公众号:前端队长 博客园:http://ww ...

  2. 从零开始学 Web 之 BOM(四)client系列

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  3. 从零开始学 Web 之 ES6(三)ES6基础语法一

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  4. 从零开始学 Web 之 移动Web(九)微金所案例

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  5. 从零开始学 Web 之 HTML5(一)HTML5概述,语义化标签

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  6. 从零开始学 Web 之 Ajax(七)跨域

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  7. 从零开始学 Web 之 JavaScript(三)函数

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

  8. 从零开始学 Web 之 JS 高级(二)原型链,原型的继承

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  9. transitionend、change、classList、兼容代码、元素样式属性的操作、-Attribute自定义属性、阻止跳转、元素绑定相同事件、元素解绑事件、事件冒泡、事件三阶段

    transitionend过渡监听事件: 过渡监听事件transitionend指的是CSS3中过渡效果执行一次后触发事件处理函数,如下案例: <!DOCTYPE html><htm ...

最新文章

  1. ViewPager一屏显示多个item,及边缘滑动事件优化
  2. 区块链中的基本概念整理
  3. springmvc 重定向传递参数
  4. va_start、va_end、va_list的使用
  5. 【Linux小技巧】开启关闭蜂鸣声
  6. maya python 创建求_如何使用python在Maya中创建列表
  7. 假设以带头结点的循环链表表示队列_JavaScript数据结构之链表--设计
  8. PAT乙级 1004 成绩排名
  9. api laravel 统一返回方法_Laravel-自定义API返回的JSON格式
  10. 【JAVA错误笔记】 - 【Could not open ServletContext resource [/WEB-INF/applicationContext.xml]解决方法】
  11. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)
  12. 京东商城,超大型电商系统架构设计原则与实践!8页ppt详解
  13. Modbus-RTU入门篇
  14. flash读写学习笔记与spi接口及简单测试验证
  15. java金额元与万元转换_java中金额元转万元工具类代码实例
  16. Flink:No operators defined in streaming topology. Cannot execute.
  17. 19美亚团队赛刷题,1-61,91-105windows部分+RAID重组,细致学习,积极备战,希望与各位一起进步
  18. paas平台_paas平台排名
  19. html平行四边形标签,平行四边形
  20. Java中线程同步锁和互斥锁有啥区别?看完你还是一脸懵逼?

热门文章

  1. EasyUI中filebox文件选择框的简单使用
  2. MyBatisPlus条件构造器带条件删除delete使用
  3. Chrome浏览器插件OneTab标签聚合插件
  4. 过程的首要目的是好的结果
  5. mysql 管理端口_MySQL8新增管理端口
  6. lync服务器不响应或无法联系,Lync 用户无法与外部联系人通信 - Skype for Business | Microsoft Docs...
  7. SA 分析专家认证名单出炉!这一期学员太牛了
  8. 神策数据上线 IPTV Demo ,三大价值助力数据驱动
  9. RE|GoF23种设计模式-动态代理
  10. 'objects' 报错问题