JavaScript事件对象
来源:互联网 发布:icmp报文 端口 编辑:程序博客网 时间:2024/05/19 19:59
DOM中的事件对象
触发DOM某个事件时,浏览器会将一个event对象传入到事件处理程序中,这个对象中包含了所有与事件有关的信息。如下显示事件类型的代码所示:
<body><input id="myBtn" type="button" value="Click me"><script> var btn = document.getElementById('myBtn'); btn.onclick = function () { alert(event.type); //"click" } btn.addEventListener('click',function () { alert(event.type); //"click" },false);</script></body>
event对象包含与创建它的特定事件有关的属性和方法。其中我们重点区分event.target,event.currentTarget和事件处理程序中的this。
* 事件处理程序内部,对象this始终等于currentTarget的值,表示当前正在处理事件的那个元素,即事件处理程序所绑定的元素
* target表示事件发生所在的元素,未必是事件处理程序所绑定的元素。
举个例子:
<body><input id="myBtn" type="button" value="Click me"><script> var btn = document.getElementById('myBtn'); document.body.onclick = function () { alert(event.currentTarget === this); alert(this === document.body); alert(event.target === this); }</script></body>
如上,如果在页面空白处点击,则三条语句都弹出true;但是如果我们点击的是按钮,则会弹出true,true,false,就是由于事件处理程序绑定在body上,则this与currentTarget都是body的引用,但是事件发生在button上,target是button的引用,由于按钮上并没有注册事件处理程序,结果click事件就冒泡到了body,在那里事件得到了处理。
IE事件处理程序中的this对象与event对象
IE的事件对象
IE的事件对象:与访问DOM的事件对象不同,要访问IE的event对象有几种不同的方法,取决于事件处理程序的方法。
1. 使用DOM0级方法添加事件处理程序
event对象作为window对象的一个属性存在。
var btn = document.getElementById('myBtn'); btn.onclick = function () { var event = window.event; alert(event.type) //"click" }
此处我们需要通过window.event取得event对象,否则event为未定义。
2. attachEvent()方法
使用attachEvent()方法就会有一个event对象作为参数被传入事件处理程序中.
var btn = document.getElementById('myBtn'); btn.attachEvent("onclick",function (event) { alert(event.type); //"click" });
IE的事件对象没有target或者currentTarget,而是srcElement。它指向事件目标,与DOM中的target属性相同。
IE的this对象
不同于DOM,在IE的事件处理函数中,this的值并不等于被绑定元素,而是等于window对象。
var btn = document.getElementById('myBtn'); btn.attachEvent("onclick",function (event) { alert(this === window); //true alert(this.id); //undefined });
因此在IE中相比于this,还是使用srcElement比较保险,比较如下代码:
var btn = document.getElementById('myBtn'); btn.onclick = function () { alert(window.event.srcElement === this); //true } btn.attachEvent("onclick",function (event) { event.srcElement === this; //false });
显然第一个window.event.srcElement和this都是window,但是第二个event.srcElement是btn,this却是window。
- 【JavaScript学习】事件:事件对象
- JavaScript事件对象
- JavaScript之事件对象
- JavaScript之事件对象
- JavaScript之事件对象
- JavaScript之事件对象
- JavaScript中的事件对象
- JavaScript--事件对象
- 【JavaScript】window对象事件
- 【javascript】对象绑定事件
- javascript 事件对象
- JavaScript 事件对象
- JavaScript事件对象
- javascript之事件对象
- JavaScript:事件对象
- JavaScript中的事件对象
- JavaScript事件的对象
- JavaScript中的事件对象
- Tensorflow object_detection API 训练自己数据集生成.record报错
- Segments
- 转载:Python高级特性 迭代(Iteration)
- 百度云推送返回10101的那些坑
- 使用Spring实现读写分离(MySQL实现主从复制)
- JavaScript事件对象
- Java core 卷一第八章泛型程序设计 (Generic programming)
- Javascript操作select控件大全
- 城市大脑技术厉害了!阿里 iDST 三篇相关论文入选ACM MM
- 基于Spring AOP方式的读写分离
- caffe的python接口学习(5):生成deploy文件
- 变量和简单数据类型(python)
- 阳光抹泪
- Java如何使用正则表达式。