[英]Javascript - Adding event listeners to all items in an array
我無法讓事件監聽器應用於我創建的數組中的所有項目。 我在這里查看了許多其他相關文章,但是似乎沒有一個內容能涵蓋我的確切情況。
我知道for循環正在工作,因為我正在將其注銷到控制台,並且可以看到每次迭代彈出。 我什至可以在控制台中看到,事件偵聽器已應用於每次迭代,但是當實際將鼠標懸停在頁面上的元素上時不會觸發。
關於我可能會缺少的任何線索嗎? 完整的代碼如下。
<head>
<title>Test Page</title>
</head>
<style>
.red-text {
color: red;
font-size: 75px;
transition: 4s;
font-family: Times;
}
.new-header {
color: blue;
font-size: 100px;
transition: 3s;
font-style: bold;
}
</style>
<body>
<h1>Welcome</h1>
<p>This is the first paragraph</p>
<p>Here is the second paragraph</p>
<p>And this is the final paragraph</p>
<script>
var h = document.querySelector("h1");
var p = document.querySelectorAll("p");
var changeHeader = function() {
h.className = h.className + " new-header";
}
var addRedClass = function() {
p.className = p.className + " red-text";
}
h.addEventListener("mouseover", changeHeader);
for(var i = 0; i < p.length; i += 1) {
console.log(p[i]);
p[i].addEventListener("mouseover", addRedClass);
}
</script>
</body>
再次,數組中的每個元素都被定位,並且我可以驗證是否已應用了偵聽器,但是鼠標懸停時不會觸發。
在此先感謝您的任何建議!
您需要對addRedClass
函數具有正確的作用域。
var addRedClass = function() {
this.className = this.className + " red-text";
};
通過使用this.className
,您可以引用鼠標懸停在的<p>
標記。
您不需要在changeHeader
函數中使用this
的changeHeader
是因為變量h
僅包含標頭節點。 但是,變量p
包含一個nodeList
,它不是對<p>
節點的單個引用。 因此,當addEventListener觸發時,它將把您鼠標懸停的<p>
標記傳遞給addRedClass
作為范圍。 這就是為什么this
工程,以改變類名。
p[i].addEventListener("mouseover", addRedClass);
因此,每當將p中的任何元素移到鼠標上時,就會調用addRedClass
函數。 這可以。
現在讓我們看一下該函數:
p.className = p.className + " red-text";
您修改p
的className
。
這是元素對象的非活動NodeList。
它沒有className
屬性(直到創建它)。
大概想使用this.className
或遍歷p
並重復使用p[i].className
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.