如果我折叠或展开"id-1“,则处理程序将正确工作。
如果我折叠或展开"id-1-1“,则会触发两个处理程序:一个用于"id-1”,另一个用于"id-1-1“。
为什么在没有发生任何动作的情况下,"id-1“事件会被触发?
const myCollapsible = document.querySelectorAll('.collapse');
myCollapsible.forEach(myOne => {
myOne.addEventListener('shown.bs.collapse', function() {
console.log('shown ' + this.id);
});
myOne.addEventListener('hidden.bs.collapse', function() {
console.log('hidden ' + this.id);
});
});<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.2/font/bootstrap-icons.css">
</head>
<body>
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-1"></a>
<a href="#">id-1</a>
<div class="collapse ms-4" id="id-1">
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-1-1"></a>
<a href="#">id-1-1</a>
<div class="collapse ms-4" id="id-1-1">
text
</div>
</div>
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-1-2"></a>
<a href="#">id-1-2</a>
<div class="collapse ms-4" id="id-1-2">
text
</div>
</div>
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-1-3"></a>
<a href="#">id-1-3</a>
<div class="collapse ms-4" id="id-1-3">
text
</div>
</div>
</div>
</div>
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-2"></a>
<a href="#">id-2</a>
<div class="collapse ms-4" id="id-2">
text
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
发布于 2022-05-19 14:10:13
您需要从您的孩子到顶级父母的e.stopPropagation()。
您可以在stopPropagation上找到更多信息。
const myCollapsible = document.querySelectorAll('.collapse');
myCollapsible.forEach(myOne => {
myOne.addEventListener('shown.bs.collapse', function(e) {
e.stopPropagation();
console.log('shown ' + this.id);
});
myOne.addEventListener('hidden.bs.collapse', function(e) {
e.stopPropagation();
console.log('hidden ' + this.id);
});
});<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.2/font/bootstrap-icons.css">
</head>
<body>
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-1"></a>
<a href="#">id-1</a>
<div class="collapse ms-4" id="id-1">
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-1-1"></a>
<a href="#">id-1-1</a>
<div class="collapse ms-4" id="id-1-1">
text
</div>
</div>
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-1-2"></a>
<a href="#">id-1-2</a>
<div class="collapse ms-4" id="id-1-2">
text
</div>
</div>
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-1-3"></a>
<a href="#">id-1-3</a>
<div class="collapse ms-4" id="id-1-3">
text
</div>
</div>
</div>
</div>
<div>
<a class="bi-caret-right-fill link-dark text-decoration-none me-2" data-bs-toggle="collapse" href="#id-2"></a>
<a href="#">id-2</a>
<div class="collapse ms-4" id="id-2">
text
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
https://stackoverflow.com/questions/72305997
复制相似问题