![](/img/trans.png)
[英]Using addEventListener and removeEventListener twice on a single button in JavaScript
[英]addEventListener and removeEventListener using forEach
為什么“div [1]”有效,為什么“div.nextElementSibling”無效,因為在console.log 中,當forEach 方法處理第一個div 時,它們的顯示相同
<--HTML-->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
<script defer src="main.js"></script>
</head>
<body>
<div class='div'>first</div>
<div class='div'>second</div>
</body>
</html>
<--JS-->
const divs = document.querySelectorAll('.div')
divs.forEach((div, id) => {
const clg = () => {
console.log(id)
//it works
divs[1].removeEventListener('click', clg)
//it doesn't
div.nextElementSibling.removeEventListener('click', clg)
}
div.addEventListener('click', clg)
//this DOM's elements for div1 are the same
console.log(divs[1],div.nextElementSibling)
})
這是因為,無論哪個循環在 forEach 循環中運行, divs[1] 將始終顯示固定值。
由於 div 包含 2 個元素
<div class='div'>first</div>
<div class='div'>second</div>
因此,對於 forEach 循環的每個循環,div 值都會發生變化,並且 divs[1] 是一個固定值,即
<div class='div'>second</div>
現在控制台日志
// Cycle 0
// Console.log(divs[1])
<div class='div'>second</div>
// Console.log(div.nextElementSibling)
<div class='div'>second</div>
// Cycle 1
// Console.log(divs[1])
<div class='div'>second</div>
// Console.log(div.nextElementSibling)
null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.