考虑两个嵌套的 div,带有“click”事件处理程序:
当单击嵌套元素时,控制台输出的结果相反(先处理父级事件):
有没有办法在不混乱事件处理程序注册顺序的情况下实现相同的效果?
var parent = document.getElementById("parent");
parent.addEventListener("click", function() {
console.log("parent click");
});
var child = document.getElementById("child");
child.addEventListener("click", function() {
console.log("child click");
});
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="parent" style="width:150px;height:100px;border: 1px solid black">
<div id="child" style="width:75px;height:50px;border: 1px solid black"></div>
</div>
</body>
</html>
当用户点击嵌套元素时,“click”事件会“冒泡”,因此控制台输出如下:
子元素点击
父元素点击
现在考虑涉及 Hammerjs 的类似示例:
var parent = document.getElementById("parent");
var hammer1 = new Hammer(parent).on("tap", function() {
console.log("parent click");
});
var child = document.getElementById("child");
var hammer2 = new Hammer(child).on("tap", function() {
console.log("child click");
});
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.js"></script>
</head>
<body>
<div id="parent" style="width:150px;height:100px;border: 1px solid black">
<div id="child" style="width:75px;height:50px;border: 1px solid black">
</div>
</div>
</body>
</html>
为了获得“冒泡”事件顺序,必须在父级事件处理程序之前注册子级事件处理程序。父级点击
子级点击
有没有办法在不混乱事件处理程序注册顺序的情况下实现相同的效果?