addEventListener(event, function, useCapture)方法将事件处理程序附加到元素,而不覆盖现有的事件处理程序。
您可以向一个元素添加许多事件处理程序。您可以向一个元素添加许多相同类型的事件处理程序,即两个“单击”事件。
您可以将事件侦听器添加到任何DOM对象,而不仅仅是HTML元素。即window对象。
addEventListener(event, function, useCapture)方法可以更容易地控制事件对冒泡的反应。使用addEventListener(event, function, useCapture)方法时,JavaScript与HTML标记分离,以提高可读性,并允许您添加事件侦听器,即使您不控制HTML标记也是如此。
1.语法
语法:element.addEventListener(event, function, useCapture);
第一个参数是事件的类型(如“ click”或“ mousedown”)。
第二个参数是我们想要在事件发生时调用的函数。
第三个参数是一个布尔值,指定是使用事件冒泡还是事件捕获。此参数是可选的。
请注意,您不要为事件使用“on”前缀; 用“ click”而不是“ onclick”。
document.getElementById("myBtn").addEventListener("click", displayDate);
2.向元素添加事件处理程序
2.1.向元素添加事件处理程序
element.addEventListener("click", function(){ alert("Hello World!"); });
2.2.您还可以在外部定义函数,然后把函数名当参数传:
element.addEventListener("click", myFunction); function myFunction() { alert ("Hello World!"); }
3.将许多事件处理程序添加到同一元素
addEventListener(event, function, useCapture)方法允许您向同一元素添加许多事件,而不会覆盖现有事件
element.addEventListener("click", myFunction); element.addEventListener("click", mySecondFunction); element.addEventListener("mouseover", myFunction); element.addEventListener("mouseout", myThirdFunction);
4.将事件处理程序添加到window对象
addEventListener()方法允许您在任何HTML DOM对象上添加事件侦听器,例如HTML元素,HTML文档,window对象或支持事件的其他对象,如xmlHttpRequest对象。
4.1.添加在用户调整窗口大小时触发的事件侦听器:
window.addEventListener("resize", function(){ document.getElementById("demo").innerHTML = sometext; });
4.2.传递参数值时,使用“匿名函数”,使用以下参数调用指定的函数:
element.addEventListener("click", function(){ myFunction(p1, p2); });
5.事件冒泡或事件捕获?
HTML DOM中有两种事件传播方式,即冒泡和捕获。事件传播是一种在事件发生时定义元素顺序的方法。
如果<div>元素中有<p>元素,并且用户单击<p>元素,应该首先处理哪个元素的“click”事件?
5.1.冒泡
在冒泡中,首先处理内部然后处理外部:首先处理<p>元素的click事件,然后处理<div>元素的click事件。
5.2.捕获
在捕获最外层元素时,首先处理外部然后处理内部:首先处理<div>元素的click事件,然后处理<p>元素的click事件。
5.3.使用addEventListener(event, function, useCapture)方法,您可以使用“useCapture”参数指定传播类型
5.3.1.默认值为false,将使用冒泡传播
document.getElementById("myP").addEventListener("click", myFunction); document.getElementById("myDiv").addEventListener("click", myFunction);
同
document.getElementById("myP").addEventListener("click", myFunction, false); document.getElementById("myDiv").addEventListener("click", myFunction, false);
5.3.2.可以设置true,使用捕获传播
document.getElementById("myP").addEventListener("click", myFunction, true); document.getElementById("myDiv").addEventListener("click", myFunction, true);
6.removeEventListener(event, function, useCapture)事件
可以使用removeEventListener()方法轻松删除事件侦听器。
element.removeEventListener("click", myFunction); function myFunction() { alert ("Hello World!"); }
7.addEventListener()和removeEventListener()兼容性问题
addEventListener()和removeEventListener()方法并不在IE 8和更早版本的支持。但是,对于这些特定的浏览器版本,您可以使用attachEvent()方法将事件处理程序附加到元素,以及detachEvent()删除它的方法,解决方案
var x = document.getElementById("myBtn"); if (x.addEventListener) { // 对于所有主流浏览器,IE 8及更早版本除外 x.addEventListener("click", myFunction); } else if (x.attachEvent) { // 适用于IE 8及更早版本 x.attachEvent("onclick", myFunction); }
点击查看冒泡和捕获的真实案例(帮助理解):https://www.runoob.com/try/try.php?filename=tryjsref_element_addeventlistener_capture
文章参考---https://blog.csdn.net/wangningjing87/article/details/100707744