JS绑定事件处理函数及处理流程
一、事件绑定的几种方式:
1.1 ele.on+“事件名“:如div.onclick = function(event){ };
1.1.1这种方式兼容性非常好,但一个元素的同一个事件上只能绑定一个处理程序。
1.1.2基本等同于写在html行间上。
1.2 obj.addEventListener(type,fn,false);
1.2.1 IE9以下不兼容,可以为一个事件绑定多个处理程序。
1.3 obj.attachEvent('on'+type,fn);
1.3.1 IE独有,一个事件同样可以绑定多个处理程序。
二、事件处理程序的运行环境
2.1 ele.on+“事件名“,如div.onclick = function(event){ };
程序this指向dom元素本身。
2.2 obj.addEventListener(type,fn,false);
程序this指向dom元素本身。
1.3 obj.attachEvent('on'+type,fn);
程序this指向window。
1.4 兼容性处理方法
function addEvent(elem,type,handle){
4.1.1 捕获阶段:事件从根节点流向目标节点,途中流经各个DOM节点,在各个节点上触
发捕获事件,直到达到目标节点。
事件捕获:结构上(非视觉上)嵌套关系的元素,会存在事件捕获的功能,即同一事件,
自父元素冒泡向子元素(事件源元素)。(自顶向下)IE没有事件捕获事件。
4.1.2 目标(target)阶段:在此阶段中,事件传导到目标节点。浏览器在查找到已经指
定给目标事件的监听器后,就会运行该监听器。
4.1.3 事件冒泡: 当为多个嵌套的元素设置了相同的事件处理程序,它们将触发事件冒泡
机制。在事件冒泡中,最内部的元素将首先触发其事件,然后是栈内的下一个元素触发该事件,以此
类推,直到到达最外面的元素。如果把事件处理程序指定给所有的元素,那么这些事件将依次触发。
事件冒泡:结构上(非视觉上4)嵌套关系的元素,会存在事件冒泡的功能,即同一事件,
自子元素冒泡向父元素。(自底向上)
focus、blur、change、submit、reset、select等事件不冒泡。
4.2 取消冒泡和阻止默认事件
4.2.1取消冒泡:可以调用事件对象的stopPropagation()方法以阻止事件的继续传播。如果在
同一对象上定义了其他处理程序,剩下的处理程序将依旧被调用,但调用stopPropagation()之后任何
其他对象上的事件处理程序将不会被调用。
w3c标准enent.stopPropagation();但不支持IE9以下的版本。
IE独有event.cancelBubble = true;
封装取消冒泡的函数stopBubble(event)
4.2.2 阻止浏览器的默认行为
哪些默认行为要做阻止
4.2.2.1 a标签链接跳转
4.2.2.2 Submit按钮的提交,
4.2.2.3 右键菜单,
4.2.2.4文本框的输入
阻止默认行为的方式
event.preventDefault();W3C标准,IE9以下不兼容。
event.returnValue = false; 兼容IE。
return false;以对象属性的方式注册的事件才生效。
自定义右键菜单 oncontextmenu
文本框只能输入数字
4.2.2.5封装一个阻止默认事件的函数
五、事件源对象
5.1 event.target 火狐只有这个
event.srcElement IE只有这个
这两个chrome 都有
5.2事件源对象兼容性写法(作用事件委托)
例2
六、事件分类
6.1鼠标事件:
6.1.1 click、mousedown、mousemove、mouseup、contextmenu、mouseover、
mouseout、mouseenter、mouseleave
6.1.2 用button来区分鼠标的按键
6.1.3 DOM3标准规定:clik只能监听左键,只能通过mousedown和mouseup来判断鼠标键
6.1.4解决clik与mousedown的冲突
JS绑定事件处理函数及处理流程的更多相关文章
- js中绑定事件处理函数,使用event以及传递额外数据
IE8中使用attachEvent绑定事件处理函数时,不能直接向event 对象添加数据属性.可以用属性复制的方法,包装新的event对象. 1. 属性复制var ObjectExtend = fun ...
- 好强大的页面功能调试(js调试,查找js绑定的事件)值得学习
引自:http://www.poluoluo.com/jzxy/201209/178110_2.html 这篇文章是根据目前 chrome 稳定版(19.0.1084.52 m)写的,因为 googl ...
- React 学习(三) ---- state 和 事件处理函数
在上两节中,我们讲述了props, 组件使用props进行渲染,但是这是一次性的, props渲染完成之后就不做任何事情了,但是现实中却不是这样的,当我们点击购物车上的加减按钮时,数量会自动加1或减1 ...
- Jquery动态绑定事件处理函数 bind / on / delegate
1.bind方法绑定的事件处理函数不会应用到后来添加到DOM中的新元素.比如你在用bind给页面元素绑定事件之后,又新添加了一些与之前绑定过事件的元素一样的DOM元素,但是这些事件并不能在新的DOM元 ...
- jquery事件之事件处理函数
一.事件处理 方法名 说明 语法 (events 事件类型,data数据,handler 事件处理函数,selector 选择器) Bind( 为每一个匹配元素的特定事件(像click)绑定一个事件处 ...
- js中关于事件处理函数名后面是否带括号的问题
今天总结一个关于事件处理程序的小细节.首先回顾一下事件处理的一些概念. JS中的事件处理(事件绑定)就是让某种或某些事件触发某些活动.有两种常见的形式,分别是DOM Level 0 和DOM Leve ...
- JS---DOM---为同一个元素绑定多个不同事件指向同一个事件处理函数
为同一个元素绑定多个不同事件指向同一个事件处理函数 1. 用了switch(e.type){} 来修改 2. break <input type="button" value ...
- JavaScript移除绑定在元素上的匿名事件处理函数
前言: 面试的时候有点蒙,结束之后想想自己好像根本就误解了面试官的问题,因为我理解的这个问题本身就没有意义.但是当时已经有一些思路,但是在一个点上被卡住. 结束之后脑子瞬间灵光,想出了当时没有迈出的那 ...
- 把多个JavaScript函数绑定到onload事件处理函数上
为了让函数只在页面加载完毕后才得到执行,我们会把函数绑定到onload事件上: window.onload = userFunction 但如果有两个函数:firstFunction() 和 seco ...
随机推荐
- 和内嵌的iframe进行通讯
利用内置iframe进行通讯 1. 在当前网页设置iframe网页(监听iframe发来postmessage消息事件) a. 外部网页接收数据: 回调方法,其中e.data为传入数据: const ...
- 珠峰-6-node
1. js主线程是单线程的. 2. path.resolve 传('/')解析出一个绝对路径.
- asp.net MVC项目开发之统计图echarts饼形图(二)
上面介绍了柱状图,只有js代码后台的传递等我们介绍完饼形图的使用过程在做介绍 有了柱状图的介绍,在使用饼形图,其实很容易了,上代码 1.首先加载网页时,需要用到的加载项和事件. //打开网页加载 $( ...
- Django 系列
Django基础 Django框架简介 Django 静态文件 Django request对象与ORM简介 Django路由系统 Django之视图层 Django之模板层 Django的setti ...
- day1 对java的认识
对java的认识 1.java是一门跨平台的语言,由jvm进行预编译,转换成类似伪代码一样的东西,最后再转换成机器语言. 2.程序是由数据结构和算法构成,其他所有的工具类,方法都是为数据结构或者算法服 ...
- 深入理解 Android 中的各种 Context
前言 网上关于 Context 的文章也已经有不少了,比如值得参考的有: Android Context完全解析,你所不知道的Context的各种细节 Android Context 到底是什么? 但 ...
- vue移动端下拉刷新、上拉加载
由于自身的项目比较简单,只有几个H5页面,用来嵌入app中,所有没有引入移动端的UI框架,但是介于能让用户在浏览H5页面时有下拉刷新和上拉加载,有更好的用户体验,自己写组件实现. 1.下拉刷新Drop ...
- 基于SSM开发在线家教预约系统源码
开发环境: Windows操作系统开发工具:Eclipse+Jdk+Tomcat8+mysql数据库 注意:次项目运行Tomcat8服务器里面 次项目比较大,需要自行研究 运行效果图 源码及原文链接: ...
- 【小白视频学Java for循环】3分钟学会Java的for循环,让看懂for循环嵌套再不是难事
目录 一.单个for循环介绍 二.for循环嵌套 听讲时能听懂的for循环为什么一做题就晕菜?一个for循环还勉强能看懂,但为什么一看到双重for循环脑子里就感觉脑子全是浆糊? 如果有上述问题那么就继 ...
- R语言矩阵维度“消失”的问题
矩阵(matrix)是R语言中很基础的一种数据结构,也是R语言使用者经常使用的一种数据结构.矩阵的维度一般为二维(m*n). R语言中矩阵的操作是非常简单易懂的,但是在对R语言做矩阵操作时,有个地方需 ...