在触发DOM上的某个事件时,会产生一个事件对象event。
DOM中的事件对象
兼容DOM的浏览器会将一个event对象传入到事件处理程序中。event对象包含与创建它的特定事件有关的属性和方法。除法的事件类型不一样,可用的属性方法就不一样。不过,所有的事件都会有下表列出的成员。
下面列出了 2 级 DOM 事件标准定义的属性:
下面列出了 2 级 DOM 事件标准定义的方法。IE 的事件模型不支持这些方法:
this、target、currentTarget
在事件处理程序的内部,对象this始终等于currentTarget的值,而target则只包含事件的实际目标。如果直接将事件处理程序指定给了目标元素,则this、currentTarget和target包含相同的值。如:
var btn = document.querySelector("#btn"); btn.onclick=function () { console.log(event.currentTarget === this); //true console.log(event.target === this); //true }
由于click事件的目标是btn按钮,所以这三个值是相等的。如果事件处理程序在按钮的父节点(document.body)中,那么这些值则不相同。如:
var btn = document.querySelector("#btn"); document.body.onclick=function () { console.log(event.currentTarget === document.body); //true console.log(this === document.body); //true console.log(event.target === btn); //true 因为btn没有注册事件处理程序,所以该click事件就冒泡到了document.body }
在这里,this和currentTarget都是document.body,因为事件处理程序是注册到这个元素上的。但是target元素却等于按钮元素,因为它是click事件的真正目标。由于按钮并没有注册事件处理程序,结果click事件就冒泡到了document.body,在那里事件才能得到处理。
1、type
在需要通过一个函数处理多个事件时,可以使用type属性。如:
//获取按钮 var btn = document.querySelector("#btn"); //设置多个事件 var handler = function() { //检测事件的类型 switch (event.type) { case "click": console.log("i click it"); break; case "mouseover": console.log("i enter it"); break; case "mouseout": console.log("i leave it"); break; } } //给响应的事件赋值 btn.onclick = handler; btn.onmouseover = handler; btn.onmouseout = handler;
2、preventDefault()
要阻止特定事件的默认行为,可以使用该方法。如:
var aTags = document.getElementsByTagName("a"); for (var i = 0; i < aTags.length; i++) { var currentATag = aTags[i]; currentATag.onclick = function() { event.preventDefault(); } };
以上代码即屏蔽了网页上全部的a标签超链接功能。要注意的是,只有cancelable属性设置为true的事件,才可以使用preventDefault()来取消其默认行为。
3、stopPropagation()
立即停止事件在DOM层次中的传播,即取消进一步的事件捕获或冒泡。例如,直接添加到一个按钮的事件处理程序可以调用该方法,从而避免触发注册在document.body上面的事件处理程序。如:
var btn = document.getElementById("btn"); btn.onclick = function () { console.log("btn clicked"); // event.stopPropagation(); }; window.onclick = function () { console.log("clicked"); }; //单击一下的结果: //btn clicked //clicked
又如:
var btn = document.getElementById("btn"); btn.onclick = function () { console.log("btn clicked"); event.stopPropagation(); }; window.onclick = function () { console.log("clicked"); }; //单击一下的结果: //btn clicked
eventPhase
该属性用来确定事件当前正位于事件流的哪个阶段。
如:
var btn = document.getElementById("btn"); document.body.addEventListener("click", function() { console.log("bodyListener" + event.eventPhase); }, true) //捕获阶段 btn.onclick = function() { console.log("btn" + event.eventPhase); } //目标对象阶段,实际上属于冒泡阶段(在btn上) document.body.onclick = function() { console.log("body" + event.eventPhase); } //冒泡阶段(在body上)
又如:
var btn = document.getElementById("btn"); document.body.addEventListener("click", function() { console.log(event.eventPhase); //1 console.log(event.currentTarget); //HTMLBodyElement }, true); btn.addEventListener("click", function() { console.log(event.eventPhase); //2 console.log(event.currentTarget); //HTMLInputElement }); document.body.addEventListener("click", function() { console.log(event.eventPhase); //3 console.log(event.currentTarget); //HTMLBodyElement });
流程大概是:
document.body 捕获阶段 --> btn 目标对象阶段 --> document.body 冒泡阶段
以上就是关于JavaScript事件对象,希望对大家的学习有所帮助。
本文向大家介绍JavaScript事件对象深入详解,包括了JavaScript事件对象深入详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript事件对象。分享给大家供大家参考,具体如下: 触发 DOM 上的事件时,会生成一个事件对象 event,它包含着所有与事件有关的信息,诸如导致事件的元素、事件的类型以及其他与特定事件相关的信息。所有的浏览器都支持 event 对象,
事件 事件:用户与浏览器特定的交互瞬间。 事件对象 在触发DOM上的事件时,会产生一个事件对象Event,它包含了与事件相关的所有信息。如:事件的类型、导致事件的元素(当前元素)、以及其它与事件相关的信息。如鼠标操作事件中,包含了鼠标的位置。键盘操作事件中,包含了是否敲击了键盘等。 DOM中的事件对象 兼容DOM的浏览器会将 事件对象Event 传入事件处理程序中,无论指定事件处理程序的方式是什么
本文向大家介绍详解javascript中的事件处理,包括了详解javascript中的事件处理的使用技巧和注意事项,需要的朋友参考一下 一.事件传播机制 客户端JavaScript程序(就是浏览器啦)采用了异步事件驱动编程模型。当文档、浏览器、元素或与之相关的对象发生某些有趣的事情时,Web浏览器就会产生事件(event)。如果JavaScript应用程序关注特定类型的事件,那么它可以注册当这
本文向大家介绍JavaScript事件处理程序详解,包括了JavaScript事件处理程序详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js事件处理程序的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
主要内容:事件绑定,JS 事件示例JS 事件(event)是当用户与网页进行交互时发生的事情,例如单机某个链接或按钮、在文本框中输入文本、按下键盘上的某个按键、移动鼠标等等。当事件发生时,您可以使用 JavaScript 中的事件处理程序(也可称为事件监听器)来检测并执行某些特定的程序。 一般情况下事件的名称都是以单词 开头的,例如点击事件 onclick、页面加载事件 onload 等。下表中列举了一些 JavaScript 中
本文向大家介绍详解JavaScript中的事件流和事件处理程序,包括了详解JavaScript中的事件流和事件处理程序的使用技巧和注意事项,需要的朋友参考一下 事件流:分两种,IE的是 事件冒泡流 ,事件开始时从最具体的元素接收,逐级向上传播到较为不具体的节点(Element -> Document)。与之相反的是 Netscape 的 事件捕获流 。 DOM2级事件规定事件流包括三个阶段:事件捕