向元素添加事件句柄的语法:element.addEventListener(event, function, useCapture);

第一个参数是事件的类型,如click或者mousedown,注意前面都没有on

第二个是事件触发后调用的函数

第三个参数为布尔值,可选,默认值为false,即冒泡传递

例如

<button id="myBtn">点我</button>
<script>
document.getElementById("myBtn").addEventListener("click", function(){alert("Hello World!");});
</script>
<button id="myBtn">点我</button>
<script>
document.getElementById("myBtn").addEventListener("click", myFunction);
function myFunction() {alert ("Hello World!");}
</script>

上述第一种情况时直接写明函数与内容,第二种情况是通过函数名调用函数,这两种情况是等价的,并且与直接给元素添加事件是等价的。

注意,直接给元素添加事件时,是通过'函数名()'指明事件的,函数名后面有括号,并且整体通过''引用,而添加事件句柄时,直接通过函数名引用,没有括号也没有引号。

<button id="myBtn" onclick='myFunction()'>点我</button>
<script>
function myFunction() {alert ("Hello World!");}
</script>

移除事件句柄:element.removeEventListener(event, function);

<p style='background:pink' id='p'>段落</p>
<button onclick='myClick()'>点我移除生成随机数的事件句柄</button>
<script>
document.getElementById("p").addEventListener('mousemove',myFunction)
function myFunction(){document.getElementById("p").innerHTML=Math.random();}
function myClick(){document.getElementById("p").removeEventListener('mousemove',myFunction);}
</script>

如下,当鼠标在粉色段落框内移动时,段落内容随着鼠标移动而变成随机数,点击按钮后再在段落内移动,段落内容保持最后的不变。

可以向一个元素添加多个不同的事件句柄,也可以是两个同类型的事件例如两个click事件,后添加的事件句柄不会覆盖之前的事件句柄。

事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果<p>元素包含在<div>元素中,并且这两个元素都有一个click事件句柄,当用户点击<p>元素时,哪个元素的 "click" 事件先被触发呢?

在冒泡中,内部元素的事件会先被触发,然后再触发外部元素,即<p>元素的点击事件先触发,然后再触发<div>元素的点击事件。

在捕获中,外部元素的事件会先被触发,然后再触发内部元素,即<div>元素的点击事件先触发 ,然后再触发<p>元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型,默认值为false即冒泡传递,当值为 true 时事件使用捕获传递。

例如,如下

<div class="outer">
I'm outer
<p class="inner">I'm inner</p>
</div>
<script>
var ele1=document.getElementsByClassName('outer')[0];
var ele2=document.getElementsByClassName('inner')[0];
ele1.onclick=function(){alert('I\'m outer')}
ele2.onclick=function(){alert('I\'m inner')}
</script>

在点击inner框时,会先弹出I'm inner再弹出I'm outer。如果想只执行本元素事件而不触发父元素事件,可向子元素的事件函数传递参数e,并通过e.stopPropagation()阻止事件传递。

ele2.onclick=function(e){
alert('I\'m inner');
e.stopPropagation()}

DOM EventListener的更多相关文章

  1. JavaScript HTML DOM EventListener

    JavaScript HTML DOM EventListener addEventListener() 方法 实例 点用户点击按钮时触发监听事件: document.getElementById(& ...

  2. JavaScript要点(十三) HTML DOM EventListener

    addEventListener() 方法 <body> <p>该实例使用 addEventListener() 方法在按钮中添加点击事件. </p> <bu ...

  3. DOM - EventListener 句柄操作

          <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  4. 第三天:DOM EventListener 句柄的添加和移除

    1.事件句柄的包含如下两个方法: ps:使用句柄的好处是,修改方法的名称时,不需要改变多处 1.添加一个句柄, 2.添加多个句柄不会覆盖,运行结果:点击“按钮”,弹出框hello,确定后,自动弹出框w ...

  5. 吴裕雄--天生自然 JAVASCRIPT开发学习:DOM EventListener

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. javascript DOM对象

    DOM简介 1.html DOM:当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model) 2.DOM操作html JS能改变页面中的所有html元素 JS能改变页 ...

  7. javascript 之DOM篇

    要怎么样的开场白才能使我有力气再更新学习进度呢?啊啊啊啊啊,表示好累啊~~~默念“棒棒棒,我最棒~”召唤精气神开总结敲字咯.哈哈哈. --------------------------------- ...

  8. js备战春招の四のDOM

    通过js查找html元素的三种方法: 1.通过id找到html元素. 2.通过标签名找到html元素. 3.通过类名找到html元素. DOM HTML document.write(); 直接写入h ...

  9. javascript HTML DOM 简单介绍

    JavaScript HTML DOM通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素.HTML DOM (文档对象模型)当网页被加载时,浏览器会创建页面的文档对象模型( ...

随机推荐

  1. gerrit设置默认rebase以及禁用分支

    1.设置默认rebase 在工程配置中设置: 2.禁用分支 Refrance:refs/for/refs/heads/分支名 禁用权限:push  “Block”   (这样就禁止了开发者往这个分支上 ...

  2. 要求根据RandomStr.java:使用类型转换生成六位验证字符串,示例程序每次运 行时,都会生成不同的字符串。

    1.程序设计思想验证码 ①定义一个字符串变量来保存随机生成的. ②利用循环产生六位随机数,在产生每一位时将其转换为char类型并写在字符串后面. ③利用对话框显示生成的验证码,并提示用户输入验证码. ...

  3. DataFrame修改列名

    把Dataframe格式的列名'class1'修改为'class_label' data.rename(columns={"label":"true_label" ...

  4. .NET拾忆:FileSystemWatcher 文件监控

    资源: https://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher_properties(v=vs.110).aspx F ...

  5. Pycharm进行版本管理

    即然pycharm为python提供了这么强大的IDE,那么,我们代码管理,没理由不用版本管理工具Git,SVN等等 在pychram中使用GitHub进行代码管理;需要准备: 1)GitHub帐号: ...

  6. caffe配置文件

    一.数据层及参数 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe. ...

  7. Linux rz命令无效

    rz命令无效 我习惯使用SecureCRT工具,进行远程连接Linux服务器,在进行文件传输的时候,可以使用sftp (alt+p)方式进行传输文件,也经常使用rz命令进行图形化的方式传输文件. 当r ...

  8. BDD 与DSL 入门

    正文: Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者.QA和非技术人员或商业参与者之间的协作.在了解Behavior Driv ...

  9. FileFilter文件过滤器

    引入:将E:\java目录下的所有.java文件复制到E:\jad目录下,并将原来的文件的扩展名从.java改为.jad package com_2; import java.io.File; imp ...

  10. 配置hdfs之后发现9000端口未被监听[玄学]

    1. 按照apache的官网的文档配置hdfs 2. 在 core-site.xml 中配置了 fs.defaultFS 的值为 hdfs://0.0.0.0:9000 3. 执行 start-dfs ...