0
点赞
收藏
分享

微信扫一扫

事件监听的移除

有时我们需要移除元素的事件监听,比如我们后面要学习的拖拽效果。

DOM0 级事件监听的移除很简单,直接把 onclick 属性设置为 null 即可:

oBox.onclick = null;

此时 oBox 对象就没有 onclick 事件监听了。

DOM2 级事件监听移除的时候,必须“指名道姓”去移除。也就是说,如果是匿名函数添加的事件监听,是

不可能去掉的。语法:

box.removeEventListener("click",boxClickHandler, true);

添加这个事件监听的时候要有名:

box.addEventListener("click",boxClickHandler,true);

function boxClickHandler(){

alert("你好");

}

认识事件对象

任何事件处理函数,系统都会自动向其传入一个 event 参数,封装了这次事件的一些细节,比如鼠标点击

的位置等。

例如:

<!DOCTYPE html>

<head>

<meta charset=UTF-8>

<title>Document</title>

<style type="text/css">

#box{

width: 200px;

height: 200px;

background-color: orange;

}

</style>

</head>

<body>

<div id="box"></div>

<script type="text/javascript">

var box = document.getElementById("box");

box.onclick = function(event){

console.log(event);

}

</script>

</body>

</html>

我们给 box 盒子添加了点击事件,并且输出了它的事件对象 event

可见,控制台中输出了 event 对象,它有非常多的属性,里面涵盖了这次事件的一些细节参数,比如鼠标

点击的位置等。

 event.target 属性

事件处理对象 event 对象一定有一个 target 属性,它表示事件阶段的最早来源。什么意思呢?如果你监听

的是冒泡阶段,则 event.target 就是最内层元素,因为最内层元素就冒泡阶段的来源;而如果你监听捕获阶段,

则 event.target 是最外层元素,因为最外层元素就是捕获阶段的来源。

比如:

<!DOCTYPE>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<title>Document</title>

</head>

<body>

<div id="box1">

<div id="box2">

<button id="btn">按我</button>

</div>

</div>

<script type="text/javascript">

var box1 = document.getElementById("box1");

var box2 = document.getElementById("box2");

var btn = document.getElementById("btn");

box1.onclick = function(event){

console.log(event.target);

}

</script>

</body>

</html>

我们监听了盒子 1 冒泡阶段的点击事件(DOM0 级只能监听冒泡阶段)。网页运行时我们点击按钮,事件将

会在冒泡阶段传给 box1,它会输出 event.target 值,控制台输出按钮对象。即,这个冒泡

事件的来源是按钮,所以对于 box1 来说,event.target 就是按钮了。


举报

相关推荐

0 条评论