<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<button>事件监听原理探究</button> <script> var btn = document.getElementsByTagName("button")[0]; // btn.addEventListener("click",fn1);
// btn.addEventListener("click",fn2); var i=0;
fn("click",fn1,btn);
fn("click",fn2,btn);
fn("click",fn3,btn); function fn1(){
i++;
console.log("我是第一个监听"+i);
}
function fn2(){
i++;
console.log("我是第二个监听"+i);
}
function fn3(){
i++;
console.log("我是第三个监听"+i);
} function fn(str,fn,ele){ //判断位置要注意:如果进入绑定事件本身,那么该事件已经本绑定了
//所以获取旧的事件必须在新的事件绑定之前
var oldEvent = ele["on"+str];
ele["on"+str] = function () {
//不能直接执行函数,因为我们还不知道以前有没有绑定我同样的事件
//进行判断,如果以前有过绑定事件,那么把以前的执行完毕在执行现在的事件,如果没有就直接执行
//如果没有被定义过事件该事件源的该事件属性应该是null对应的boolean值是false
//如果已经定义过事件该事件源的该事件属性应该是function本身对应的boolean值是true
if(oldEvent){
//因为oldEvent本身他就是函数本身,那么后面加一个();就是执行函数
// console.log(oldEvent()+"oldEvent"+i);
oldEvent(); fn();
}else{
//没有绑定过事件
fn();
console.log("没有绑定事件");
}
}
} </script>
</body>
</html>

最新文章

  1. 基于HTML5实现3D热图Heatmap应用
  2. WNMP集成环境下配置thinkPHP
  3. 如何使用 OpenStack CLI - 每天5分钟玩转 OpenStack(22)
  4. IO流(三)__字节流 标准输入输出流 转换流
  5. 验证:mysql AUTO_INCREMENT 默认值是1
  6. Window Server 2003(IIS6) 安装.net4.0遇到的问题总结
  7. spring随手笔记3:销毁方法
  8. 解决C# 转到定义时打开的是元数据文件而非源代码文件的问题
  9. php 中文字符串首字母的获取函数
  10. ECMall注册机制简要分析
  11. 谁在唱衰PC?说出你的理由
  12. 【Demo 0009】表视图控制器
  13. 游戏音频技术备忘 (三) 集成Wwise到Unreal Engine
  14. 关于vue 框架与后台框架的混合使用的尝试------转载
  15. %E6%9D%8E%E9%9B%B7是什么编码
  16. 使用Docker Swarm搭建分布式爬虫集群
  17. 如何将自己的Image镜像Push到Docker Hub
  18. Apache Storm Installation
  19. 利用itext生成pdf的简单例子
  20. 【java】java下载文件中换行符 在windows和linux下通用的

热门文章

  1. 操作系统--进程管理1--单个CPU情况
  2. 扩展 lua require 的行为
  3. Leetcode题解(十)
  4. A Simple Math Problem(矩阵快速幂)(寒假闭关第一题,有点曲折啊)
  5. HDU 4267 A Simple Problem with Integers(树状数组区间更新)
  6. 脑残手贱:被NFS祸害的调度系统
  7. Linux 进程后台运行的几种方式(screen)
  8. jQuery选择器(表单元素过滤选择器)第八节
  9. MongoDB入门系列(一):基础概念和安装
  10. PHP基础入门(三)【PHP中的数组】