JavaScript HTML DOM 事件监听程序
JavaScript HTML DOM 事件监听程序
addEventListener() 方法
示例代码:
添加当用户点击按钮时触发的事件监听器:
document.getElementById("myBtn").addEventListener("click", displayDate);
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript addEventListener()</h2>
<p>此示例使用 addEventListener() 方法将 click 事件附加到按钮。</p>
<button id="myBtn">试一试</button>
<p id="demo"></p>
<script>
document.getElementById("myBtn").addEventListener("click", displayDate);
function displayDate() {
document.getElementById("demo").innerHTML = Date();
}
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
addEventListener()
方法为指定元素指定事件处理程序。
addEventListener()
方法为元素附加事件处理程序而不会覆盖已有的事件处理程序。
您能够向一个元素添加多个事件处理程序。
您能够向一个元素添加多个相同类型的事件处理程序,例如两个 "click" 事件。
您能够向任何 DOM 对象添加事件处理程序而非仅仅 HTML 元素,例如 window 对象。
addEventListener()
方法使我们更容易控制事件如何对冒泡作出反应。
当使用 addEventListener()
方法时,JavaScript 与 HTML 标记是分隔的,已达到更佳的可读性;即使在不控制 HTML 标记时也允许您添加事件监听器。
您能够通过使用 removeEventListener()
方法轻松地删除事件监听器。
语法
element.addEventListener(event, function, useCapture);
第一个参数是事件的类型(比如 "click" 或 "mousedown")。
第二个参数是当事件发生时我们需要调用的函数。
第三个参数是布尔值,指定使用事件冒泡还是事件捕获。此参数是可选的。
注意:请勿对事件使用 "on" 前缀;请使用 "click" 代替 "onclick"。
向元素添加事件处理程序
示例代码:
当用户点击某个元素时提示 "Hello World!":
element.addEventListener("click", function(){ alert("Hello World!"); });
完整实例:
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript addEventListener()</h1>
<p>此示例使用 addEventListener() 方法将 click 事件附加到按钮。</p>
<button id="myBtn">试一试</button>
<script>
document.getElementById("myBtn").addEventListener("click", function() {
alert("Hello World!");
});
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
您也可以引用外部“命名”函数:
示例代码:
当用户点击某个元素时提示 "Hello World!":
element.addEventListener("click", myFunction);
function myFunction() {
alert ("Hello World!");
}
完整实例:
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript addEventListener()</h1>
<p>此例使用 addEventListener() 方法在用户单击按钮时执行函数。</p>
<button id="myBtn">试一试</button>
<script>
document.getElementById("myBtn").addEventListener("click", myFunction);
function myFunction() {
alert ("Hello World!");
}
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
向相同元素添加多个事件处理程序
addEventListener()
方法允许您向相同元素添加多个事件,同时不覆盖已有事件:
示例代码:
element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);
完整实例:
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript addEventListener()</h1>
<p>此示例使用 addEventListener() 方法将两个 click 事件添加到同一按钮。</p>
<button id="myBtn">试一试</button>
<script>
var x = document.getElementById("myBtn");
x.addEventListener("click", myFunction);
x.addEventListener("click", someOtherFunction);
function myFunction() {
alert ("Hello World!");
}
function someOtherFunction() {
alert ("此函数也被执行了!");
}
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
您能够向相同元素添加不同类型的事件:
示例代码:
element.addEventListener("mouseover", myFunction);
element.addEventListener("click", mySecondFunction);
element.addEventListener("mouseout", myThirdFunction);
完整实例:
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript addEventListener()</h1>
<p>此例使用 addEventListener() 方法在同一按钮上添加许多事件。</p>
<button id="myBtn">试一试</button>
<p id="demo"></p>
<script>
var x = document.getElementById("myBtn");
x.addEventListener("mouseover", myFunction);
x.addEventListener("click", mySecondFunction);
x.addEventListener("mouseout", myThirdFunction);
function myFunction() {
document.getElementById("demo").innerHTML += "Moused over!<br>";
}
function mySecondFunction() {
document.getElementById("demo").innerHTML += "Clicked!<br>";
}
function myThirdFunction() {
document.getElementById("demo").innerHTML += "Moused out!<br>";
}
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
向 Window 对象添加事件处理程序
addEventListener()
允许您将事件监听器添加到任何 HTML DOM 对象上,比如 HTML 元素、HTML 对象、window 对象或其他支持事件的对象,比如 xmlHttpRequest 对象。
示例代码:
添加当用户调整窗口大小时触发的事件监听器:
window.addEventListener("resize", function(){
document.getElementById("demo").innerHTML = sometext;
});
完整实例:
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript addEventListener()</h1>
<p>此例在 window 对象上使用 addEventListener() 方法。</p>
<p>尝试调整此浏览器窗口的大小以触发“resize”事件处理程序。</p>
<p id="demo"></p>
<script>
window.addEventListener("resize", function(){
document.getElementById("demo").innerHTML = Math.random();
});
</script>
</body>
</html>
运行结果:
Javascript addEventListener() 此例在 window 对象上使用 addEventListener() 方法。 尝试调整此浏览器窗口的大小以触发“resize”事件处理程序。
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
传递参数
当传递参数值时,请以参数形式使用调用指定函数的“匿名函数”:
示例代码:
element.addEventListener("click", function(){ myFunction(p1, p2); });
完整实例:
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript addEventListener()</h1>
<p>此例演示如何在使用 addEventListener() 方法时传递参数值。</p>
<p>单击按钮以执行计算。</p>
<button id="myBtn">试一试</button>
<p id="demo"></p>
<script>
var p1 = 5;
var p2 = 7;
document.getElementById("myBtn").addEventListener("click", function() {
myFunction(p1, p2);
});
function myFunction(a, b) {
var result = a * b;
document.getElementById("demo").innerHTML = result;
}
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
事件冒泡还是事件捕获?
在 HTML DOM 中有两种事件传播的方法:冒泡和捕获。
事件传播是一种定义当发生事件时元素次序的方法。假如 <div> 元素内有一个 <p>,然后用户点击了这个 <p> 元素,应该首先处理哪个元素“click”事件?
在冒泡中,最内侧元素的事件会首先被处理,然后是更外侧的:首先处理 <p> 元素的点击事件,然后是 <div> 元素的点击事件。
在捕获中,最外侧元素的事件会首先被处理,然后是更内侧的:首先处理 <div> 元素的点击事件,然后是 <p> 元素的点击事件。
在 addEventListener() 方法中,你能够通过使用“useCapture”参数来规定传播类型:
addEventListener(event, function, useCapture);
默认值是 false
,将使用冒泡传播,如果该值设置为 true
,则事件使用捕获传播。
示例代码:
document.getElementById("myP").addEventListener("click", myFunction, true);
document.getElementById("myDiv").addEventListener("click", myFunction, true);
完整实例:
<!DOCTYPE html>
<html>
<head>
<style>
#myDiv1, #myDiv2 {
background-color: coral;
padding: 50px;
}
#myP1, #myP2 {
background-color: white;
font-size: 20px;
border: 1px solid;
padding: 20px;
}
</style>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body>
<h1>JavaScript addEventListener()</h1>
<div id="myDiv1">
<h2>Bubbling:</h2>
<p id="myP1">点击段落,我是冒泡。</p>
</div><br>
<div id="myDiv2">
<h2>Capturing:</h2>
<p id="myP2">点击段落,我是捕获。</p>
</div>
<script>
document.getElementById("myP1").addEventListener("click", function() {
alert("你点击了 P 元素!");
}, false);
document.getElementById("myDiv1").addEventListener("click", function() {
alert("你点击了 DIV 元素 !");
}, false);
document.getElementById("myP2").addEventListener("click", function() {
alert("你点击了 P2 元素!");
}, true);
document.getElementById("myDiv2").addEventListener("click", function() {
alert("你点击了 DIV2 元素 !");
}, true);
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
removeEventListener() 方法
removeEventListener()
方法会删除已通过 addEventListener()
方法附加的事件处理程序:
示例代码:
element.removeEventListener("mousemove", myFunction);
完整实例:
<!DOCTYPE html>
<html>
<head>
<style>
#myDIV {
background-color: coral;
border: 1px solid;
padding: 50px;
color: white;
font-size: 20px;
}
</style>
</head>
<body>
<h1>JavaScript removeEventListener()</h1>
<div id="myDIV">
<p>这个 div 元素有一个 onmousemove 事件处理程序,每次在这个橙色字段中移动鼠标时都会显示一个随机数。</p>
<p>单击按钮以删除 div 的事件处理程序。</p>
<button onclick="removeHandler()" id="myBtn">删除</button>
</div>
<p id="demo"></p>
<script>
document.getElementById("myDIV").addEventListener("mousemove", myFunction);
function myFunction() {
document.getElementById("demo").innerHTML = Math.random();
}
function removeHandler() {
document.getElementById("myDIV").removeEventListener("mousemove", myFunction);
}
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
浏览器支持
表格中的数字规定了完全支持这些方法的首个浏览器版本。
方法 | |||||
addEventListener() | 1.0 | 9.0 | 1.0 | 1.0 | 7.0 |
removeEventListener() | 1.0 | 9.0 | 1.0 | 1.0 | 7.0 |
注释:IE 8、Opera 6.0 及其更早版本不支持 addEventListener()
和 removeEventListener()
方法。不过,对于这些特殊的浏览器版本,您可以使用 attachEvent()
方法向元素添加事件处理程序,并由 detachEvent()
方法删除:
element.attachEvent(event, function);
element.detachEvent(event, function);
示例代码:
跨浏览器解决方案:
var x = document.getElementById("myBtn");
if (x.addEventListener) { // 针对主流浏览器,除了 IE 8 及更正版本
x.addEventListener("click", myFunction);
} else if (x.attachEvent) { // 针对 IE 8 及更早版本
x.attachEvent("onclick", myFunction);
}
完整实例:
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript addEventListener()</h1>
<p>Internet Explorer 8 及更早版本不支持 addEventListener() 方法。</p>
<p>此例演示了适用于所有浏览器的解决方案。</p>
<button id="myBtn">试一试</button>
<script>
var x = document.getElementById("myBtn");
if (x.addEventListener) {
x.addEventListener("click", myFunction);
} else if (x.attachEvent) {
x.attachEvent("onclick", myFunction);
}
function myFunction() {
alert("Hello World!");
}
</script>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
HTML DOM Event 对象参考手册
如需所有 HTML DOM 事件的列表,请访问我们完整的 HTML DOM Event 对象参考手册。