js事件处理、事件对象
事件类型分类:
1 添加在html结构中的事件
<div id="div1" onclick="alert('append click event in html')"> </div>
点击div1之后弹出 append click event in html;其实在html结构中添加的事件也属于dom0级事件。
2 dom0级事件处理
<div id="div1"> </div>
<script>
var dom1 = document.getElementById('div1');
dom1.onclick = function(){alert(' first dom0 ')};
dom1.onclick = function(){alert(' second dom0 ')};
</script>
点击div1之后只弹出 second dom0;说明dom0级事件后面赋值的事件会覆盖掉前面的
如果在div中在加 onclick="alert('append click event in html'), 代码如下:
<div id="div1" onclick="alert('append click event in html')"> </div>
<script>
var dom1 = document.getElementById('div1');
dom1.onclick = function(){alert(' first dom0 ')};
dom1.onclick = function(){alert(' second dom0 ')};
</script>
点击div后 仍然只弹出second dom0, 说明在html中添加的点击事件处理程序也被覆盖。
实际上 dom1.onclick 等价于html结构中div标签中的onclick=""; 可以把onclick看成dom元素对象的一个属性 dom1{ id:"1", onclick:function(){ ... } }
3 dom2级事件处理
dom.addEventListener(“事件名”,“事件处理程序”,“布尔值”)
布尔值表示该事件的响应顺序,默认值为false。
事件传递有两种方式:冒泡与捕获。
事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?
在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。
在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。
<div id="div1" onclick="alert('append click event in html')"> </div>
<script>
var dom1 = document.getElementById('div1');
var handle = function () {
alert('dom2 event handle');
};
dom1.onclick = function(){alert(' first dom0 ')};
dom1.onclick = function(){alert(' second dom0 ')};
dom1.addEventListener("click", function(){alert(' first dom2 ')}, false);
dom1.addEventListener("click", handle, false);
</script>
<div> </div>
<script>
var dom1 = document.getElementById('div1');
var handle = function () {
alert('event handle');
};
dom1.addEventListener("click", function(){alert(' first dom2 ')}, false);
dom1.addEventListener("click", function(){alert(' second dom2 ')}, false);
dom1.addEventListener("click", handle, false);
dom1.removeEventListener("click", handle, false);
dom1.removeEventListener("click", function(){alert(' second dom2 ')}, false);
</script>
点击div1依次弹出 first dom2 、second dom2
关于事件冒泡和捕获的代码实例:
<div id="div1"><div id="div2"><div id="div3"><div id="div4"></div></div></div></div>
<script>
var html = document.getElementsByTagName('html')[0];
var body = document.getElementsByTagName('body')[0];
var dom1 = document.getElementById('div1');
var dom2 = document.getElementById('div2');
var dom3 = document.getElementById('div3');
var dom4 = document.getElementById('div4');
window.addEventListener("click", function(){alert('window')}, false);
document.addEventListener("click", function(){alert('document')}, true);
html.addEventListener("click", function(){alert('html')}, false);
body.addEventListener("click", function(){alert('body')}, true);
dom1.addEventListener("click", function(){alert('div1')}, false);
dom2.addEventListener("click", function(){alert('div2')}, true);
dom3.addEventListener("click", function(){alert('div3')}, false);
dom4.addEventListener("click", function(){alert('div4')}, false);
// addEventListen 添加的第三个参数true则是事件捕获,不添加或false则为事件冒泡, 由事件源dom4元素 --> 父元素dom3 --> 爷爷元素dom2 --> ... --> body --> html --> document --> window 执行事件处理程序
// 若从事件源dom4元素到window 有存在事件捕获的绑定事件 ,则事件从window到事件源dom4 依次执行完设置为true的捕获事件 在从事件源dom到window执行完其他未设置为true的冒泡事件。
//如上述代码 依次弹出 document body div2 div4 div3 div1 html window
</script>
注意:IE8及更早IE版本,Opera7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。
对于这类浏览器版本可以使用 attachEvent() 方法来添加事件,detachEvent() 方法来移除事件句柄
<div id="div1"> </div>
<script>
var dom1 = document.getElementById('div1');
dom1.addEventListener("click",function(event){console.log(event.type);console.log(event.target)})
</script>
<div><a></a></div>
<script>
dom_div.addEventListener("click",fun_div)
dom_a.addEventListener("click",fun_a)
</script>
js事件处理、事件对象的更多相关文章
- js event事件对象概括
事件是用户或者浏览器自身执行的动作,而响应某个事件的函数就叫做事件处理程序或者叫事件侦听器. 定义事件处理程序可以大致分为以下三种: 一.html事件处理程序 元素支持的每种事件都可以用一个与之对应的 ...
- JS键盘事件对象之keyCode、charCode、which属性对比
先说一些有关键盘事件的事项:用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown. onkeypress和onkeyup这 ...
- Js高级 事件 对象
1.事件 浏览器客户端上客户触发的行为都成为事件 所有的事件都是天生自带的,不需要我们我去绑定,只需要我们去触发. 通过obj.事件名=function(){} 事件名:onmouseover onm ...
- js函数事件对象
每个函数都有4个默认对象 arguments 保存着实际传入的参数,集合列表 return 有两个功能,打断函数和返回函数值 this 谁调用的函数,this就是谁 event 事件对象 事件 box ...
- 2-4 js基础-事件对象小结
var e=ev||event; e.cancelBubble=true; document.documentElement html document.body ...
- JS 事件对象和事件冒泡
1.事件对象 js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源.事件发生时的鼠标位置.事件按键等. 事件对象的获取方法: IE中可以window.event直接获取,而Firefox ...
- 和我一起理解js中的事件对象
我们知道在JS中常用的事件有: 页面事件:load: 焦点事件:focus,blur: 鼠标事件:click,mouseout,mouseover,mousemove等: 键盘事件:keydown,k ...
- Javascript和jquery事件--事件对象event
1. 事件对象event 对于event,js的解释是Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态.而jq的解释是事件处理(事件对象.目标元素 ...
- JavaScript基础回顾知识点记录6-操作元素样式和事件对象(介绍基本使用)
js 中 操作元素样式 通过js修改元素内联样式(设置和读取的都是内联样式) 获取当前元素显示的样式 <html> <head> <meta charset=" ...
- JS事件流、DOM事件流、IE事件处理、跨浏览器事件处理、事件对象与类型
事件的移除 removeEventListener() 第二个参数需要指定要移除的事件句柄,不能是匿名函数,因为无法识别 想要移除成功,那么三个参数必须跟addEventListener中的三个完全一 ...
随机推荐
- angularjs 2.0 快速开始
前言 angularjs2.0 如果发布,公司的项目会基于2.0开发,在1.0的时候就踩了好多坑,趁这2.0还没正式发布,赶紧踩下坑. 这篇文章是参考angularjs2.0 官方文档写的,开发环境需 ...
- ElasticSearch ik分词安装
1.下载对应版本的ES ik分词 https://github.com/medcl/elasticsearch-analysis-ik/releases 2.解压elasticsearch-analy ...
- 关于如何在github上创建团队开发环境
今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...
- DAC Usage4:从 Backup Package(.bacpac)还原DB
使用DAC,能够将database的schema 和 data 从一个server 或 cloud 上复制到另外一个server上,存储schema 和 data的文件是 .bacpac 文件. 方法 ...
- Logical read, Physical read (SET STATISTICS IO)
在查询性能优化时,Logical Read非常重要,它的计数一般与查询出来的结果集数量成正比,与数据读取的速度也成正比. 1,SET STATISTICS IO 显式Disk IO的信息 Syntax ...
- WPF如何仿制QQ2013登录窗口的关闭效果
昨天,有位朋友问我,WPF能做出像QQ2013窗口在关闭时那个貌似透明过渡的动画吗?我就歪着脸跟他说:"只有你想不到的,没有WPF做不到的". 他又接着说:"我知道肯定会 ...
- Huffman树进行编码和译码
//编码#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> ...
- Neutron 功能概述 - 每天5分钟玩转 OpenStack(65)
从今天开始,我们将学习 OpenStack 的 Networking Service,Neutron.Neutron 的难度会比前面所有模块都大一些,内容也多一些.为了帮助大家更好的掌握 Neutor ...
- TextView+Fragment实现底部导航栏
前言:项目第二版刚上线没多久,产品又对需求进行了大改动,以前用的是左滑菜单,现在又要换成底部导航栏,于是今天又苦逼加班了.花了几个小时实现了一个底部导航栏的demo,然后总结一下.写一篇博客.供自己以 ...
- MySQL学习笔记九:存储过程,存储函数,触发器
存储过程 1.存储过程由一组特定功能的SQL语句组成,对于大型应用程序优势较大,相对不使用存储过程,具有以下优点: a.性能提高,因为存储过程是预编译的,只需编译一次,以后调用就不须再编译 b.重用性 ...