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中的三个完全一 ...
随机推荐
- Sublime Text执行js
Sublime Text执行js 在Build Sytem添加以下内容: { "cmd": ["node", "$file"], " ...
- JSON-fastjson
fastjson 是alibaba的一个Json处理工具包. 1.使用 JSON.toJSONString 和 JSON.parseObject fastjson只需要掌握两个静态方法:JSO ...
- slave IO流程之二:注册slave请求和dump请求
slave IO流程已经在http://www.cnblogs.com/onlyac/p/5815566.html中有介绍 这次我们要探索注册slave请求和dump请求的报文格式和主要流程. 一.注 ...
- oracle数据库表的导入导出cmd命令大全
在实际的项目开发中经常会遇到导入导出oracle数据库中的表,以下是常用的一些cmd命令: 一.数据表的导出 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daoch ...
- 【.NET深呼吸】线程信号量(Semaphore)
Semaphore类可以控制某个资源允许访问的线程数,Semaphore有命名式的,也有不命名的:如果不考虑跨进程工作,一般在代码中使用不命名方式即可. 信号量有点类似于等待句柄,某个线程如果调用了W ...
- 轻量级前端MVVM框架avalon - 执行流程2
接上一章 执行流程1 在这一大堆扫描绑定方法中应该会哪些实现? 首先我们看avalon能帮你做什么? 数据填充,比如表单的一些初始值,切换卡的各个面板的内容({{xxx}},{{xxx|html}}, ...
- OpenCASCADE Hidden Line Removal
OpenCASCADE Hidden Line Removal eryar@163.com Abstract. To provide the precision required in industr ...
- WPF自定义控件与样式(2)-自定义按钮FButton
一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 还是先看看效果 ...
- 【原创】开源Math.NET基础数学类库使用(08)C#进行数值积分
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- Objective-C中把数组中字典中的数据转换成URL
可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是M ...