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中的三个完全一 ...
随机推荐
- KnockoutJS 3.X API 第七章 其他技术(1) 加载和保存JSON数据
Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天 ...
- Yii2-多表关联的用法示例
本篇博客是基于<活动记录(Active Record)>中对于AR表关联用法的介绍. 我会构造一个业务场景,主要是测试我比较存疑的各种表关联写法,而非再次介绍基础用法. 构造场景 订单ar ...
- VS-项目发布失败的解决方案1
报错信息 错误 1 未能将文件 Script\easyui\themes\gray\images\Thumbs.db 复制到 obj\Release\Package\PackageTmp\Script ...
- 解密jQuery内核 DOM操作方法(二)html,text,val
回顾下几组DOM插入有关的方法 innerHTML 设置或获取位于对象起始和结束标签内的 HTML outerHTML 设置或获取对象及其内容的 HTML 形式 看图对照区别 innerText 设置 ...
- .NET平台机器学习资源汇总,有你想要的么?
接触机器学习1年多了,由于只会用C#堆代码,所以只关注.NET平台的资源,一边积累,一边收集,一边学习,所以在本站第101篇博客到来之际,分享给大家.部分用过的 ,会有稍微详细点的说明,其他没用过的, ...
- Android仿qq聊天记录长按删除功能效果
最近项目在做IM即时通讯开发,在删除聊天列表的时候跟删除聊天详细信息的时候,产品经理想要跟ios一样,在当前选中行上方弹出一个删除窗口.于是先从网上找demo,找了一个发现是Dialog做的,我感觉没 ...
- T-SQL:毕业生出门需知系列(七)
第7课 创建计算字段 7.1 计算字段(格式化字段) 存储在数据库表中的数据一般不是应用程序所需要的格式,如: 1.需要显示公司名,同时还需要显示公司的地址,但这两个信息存储在不同的表列中. 2.列数 ...
- IDDD 实现领域驱动设计-SOA、REST 和六边形架构
上一篇:<IDDD 实现领域驱动设计-架构之经典分层> 阅读目录: SOA-面向服务架构 REST 与 RESTful 资源(Resources) 状态(State) 六边形架构 DDD ...
- 附录C 编译安装Hive
如果需要直接安装Hive,可以跳过编译步骤,从Hive的官网下载编译好的安装包,下载地址为http://hive.apache.org/downloads.html . C.1 编译Hive C.1 ...
- svn 几个常用命令(持续更新)
1:获取某个版本号(3583)下的代码 svn co http://tech.yoai.com:8300/c ...