javascript事件学习(3)-Event对象

3、事件对象

在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。包含导致事件的元素、事件的类型以及其他与特定事件相关的信息。所有的浏览器都支持event对象,但支持的方式不同。

event对象本身就是一个构造函数,可以用来生成新的实例。

event = new Event(typeArg, eventInit);

Event构造函数接受两个参数。第一个参数是字符串,表示事件名称,第二个参数是一个对象,表示事件对象的配置。

var ev = new Event(‘click‘, {‘bubble‘:true, ‘cancelable‘:false});
document.dispatchEvent(ev);

3、1 bubbles, eventPhase

(1)bubbles

bubbles属性返回一个布尔值,表示当前时间是否冒泡,该属性为只读属性,只能在新建事件时改变,默认值为false.

(2)eventPhase

eventPhase属性返回一个整数,表示事件目前所处的节点:1表示捕获阶段,2表示目标阶段,3表示冒泡阶段

3、2 cancelable, defaultPrevented

以下属性与事件的默认行为有关。

(1) cancelable

cancelable属性返回一个布尔值,表示事件是否可以取消。该属性为只读属性,只能在新建事件时改变,Event构造函数生成的对象默认值为false。如果要取消某个事件,需要在这个时间上面调用preventDefault方法,这会阻止浏览器的默认行为。

(2) defaultPrevented

defaultPrevented属性返回一个布尔值,表示该事件是否调用过preventDefault方法。

3、3 currentTarget, target

以下属性与事件的目标节点有关。

currentTarget属性返回事件当前所在的节点,即正在执行的监听函数所绑定的那个节点,而target属性返回事件发生的节点。如果监听函数在捕获阶段和冒泡阶段,那么这两个属性返回的值是不一样的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>currentTarget和target</title>
</head>
<body>
    <p id="para1">test<em> currentTarget</em> </p>
    <p id="para2">test<em> target</em> </p>
</body>
<script>
    var para1 = document.querySelector(‘#para1‘);
    var para2 = document.querySelector(‘#para2‘);
    para1.addEventListener(‘click‘, hide1, false);
    para2.addEventListener(‘click‘, hide2, false);
    function hide1(e) {
        console.log(this === e.currentTarget); //true
        e.currentTarget.style.visibility = ‘hidden‘;
    }
    function hide2(e) {
        console.log(this === e.target); //不一定为true
        e.target.style.visibility = ‘hidden‘;
    }
</script>
</html>

3、4 type, detail, timeStampm isTrusted

以下属性与事件对象的其他信息有关。

(1) type

type属性返回一个 字符串,表示事件类型,具体的值同addEventListener方法的第一个参数相同。

var string = event.type

(2) detail

detail属性返回一个数值,表示事件的某种属性。具体含义与事件类型有关,对于鼠标事件,表示鼠标事件在某个位置按下的次数。

(3) timeStamp

timeStamp属性返回一个毫秒时间戳,表示事件发生的时间

(4) isTrusted

istrusted属性返回一个布尔值,表示该事件是否可以信任。Firefox浏览器中,用户触发的事件会返回true,脚本触发的事件返回false;IE浏览器中,除了使用createEvent方法生成的事件,所有其他事件都返回true;Chrome浏览器不支持该属性。

3、5 preventDefault(), stopPropagation(), stopImmediatePropagation()

(1) preventDefault()

preventDefault方法取消浏览器对当前事件的默认行为,如果cancelable是true,则可以使用该方法。

(2) stopPropagation()

stopPropagation方法阻止事件在DOM中继续传播,防止再触发定义在别的节点上的监听函数,但不包括在当前节点新定义的事件监听函数。

(3) stopImmediatePropagation()

stopImmediatePropagation方法阻止同一个事件的其他监听函数被调用。如果同一个节点对一个事件调用了多个监听函数,这些监听函数将按照顺序执行,但是如果其中一个函数调用了该方法,那么后面的其他函数将不再执行。

时间: 2024-08-24 07:41:18

javascript事件学习(3)-Event对象的相关文章

现代事件处理程序和Event对象对浏览器兼容性的判断和解决

兼容性问题的解决: 因为 IE 和 DOM 对于现代事件处理程序指派的方式不同,为了保证我们编写的代码在 IE 和 DOM浏览器系列下都能用,我们可以用如下代码来解决兼容性问题: var fnClick1 = function() { aleart("我被点击了";) } var fnClick2 = function() { aleart("我也被点击了";) } var oDiv = document.getElementById("div1"

js事件中的event对象

addEvent(oDiv,"click",function(event){ console.log(event.bubbles+"事件是否冒泡"); console.log(event.cancelable +"是否可以取消默认行为") console.log(event.defaultPrevented+"DOM3新增,是否已经调用了preventDefault()"); console.log(event.target)

javascript事件学习笔记

事件冒泡 并不是所有的事件都支持事件冒泡,比如submit ,focus,blur不支持事件冒泡,mouseover,mouseout虽然支持冒泡,但是一般不用,因为需要经常计算元素的位置,消耗比较大. 事件冒泡带来的优点是可以使用事件委托,提高了页面的性能,缺点是父级元素中如果也绑定了一样的事件,那么子元素事件的触发也会触发父级元素的事件,解决办法就是禁止子元素的事件冒泡. 事件委托 这是好东西,借助他可以提高页面的性能.首先,每个函数都是对象,都会占用内存,内存中的对象越多,性能越差.其次,

记一次途家面试中问到的JavaScript事件机制:Event Loop

前几天去途家面试,问到了事件机制,以及异步队列的问题.很遗憾,当时答错了.回来之后查了下资料,看到阮一峰老师博客的分析,感觉讲的非常浅显易懂,就分享过来了. 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. JavaScript的单线程,与它的用途有关.作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM.这决定了它只能是单线程,

JavaScript 进阶学习 7 DOM对象,控制HTML元素

DOM :文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). getElementsByName()方法 :返回带有指定名称的节点对象的集合. 语法 : document.getElementsByName(name) 与getElementById() 方法不同的是,通过元素的 name 属性查询元素,而不是通过 id 属性. 注意: 1. 因为文档中的 name 属性可能不

JavaScript 进阶学习 6 浏览器对象

window对象 :是BOM的核心,window对象指当前的浏览器窗口..    window对象方法 JavaScript 计时器  :在JavaScript中,我们可以在设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行. 计时器类型:一次性计时器:仅在指定的延迟时间之后触发一次. 间隔性触发计时器:每隔一定的时间间隔就触发一次. 计时器方法: 计时器setInterval() :在执行时,从载入页面后每隔指定的时间执行代码.  语法 :   setInterval(代码,交互时间)

第九课 事件的状态Event 对象

<ul> <li>1itme1</li> <li>2itme2</li> <li>3itme3</li> <li>4itme4</li> <li>5itme5</li> </ul> <script> var lis=document.getElementsByTagName("li"); for(var i=0;i<lis.l

[JavaScript语法学习]全面介绍对象

对象的属性判断方法 1. in 2. hasOwnProperty() JS中的对象的属性(键名)必须是字符串,为了弥补和其他语言的差距(键名可以是任意类型) 在最新ES6标准中引入了Map和Set 在ES6标准中引入了iterable类型,Array  Map Set都属于iterable类型,可以使用for...of循环来遍历 for...of循环只会循环集合本身元素 ES5.1标准 forEach forEach(element, index, array) ES6对Object的扩展 1

JavaScript基础学习之-自定义对象(2)

自定义对象 一.定义类或对象1.工厂方式创建对象car 1 var oCar = new Object; 2 oCar.color = "red"; 3 oCar.doors = 4; 4 oCar.mpg = 23; 5 oCar.showColor = function(){ 6 alert(this.corlor); 7 }; 8 9 创建多个car 10 function createCar(color, doors, mpg) { 11 var tempcar = new O