我一直在嘗試通過將一本書中的一些jquery示例重構爲javascript來學習javascript。在以下代碼中,我將一個點擊偵聽器添加到一個選項卡,並在用戶單擊該選項卡時將其更改爲活動狀態。試圖讓我的JavaScript代碼中的「this」有意義(一件事情有效,另一件事不行)
var tabs = document.querySelectorAll(".tabs a span");
var content = document.querySelectorAll("main .content li");
for (var tabNumber = 0; tabNumber <= 2; tabNumber++) {
tabs[tabNumber].addEventListener("click", function (event) {
for (var i = 0; i < tabs.length; i++) {
tabs[i].classList.remove("active");
}
tabs[tabNumber].classList.add("active");
for (var i = 0; i < content.length; i++) {
content[i].innerHTML = "";
}
event.preventDefault();
});
}
當我運行它這將返回undefined error
。但是,我試圖用this.classList.add("active")
替換tabs[tabNumber].classList.add("active")
,它工作。
爲什麼前面的代碼不工作?據我所見,他們指的是同樣的事情,並且tabs[tabNumber]
應該工作,因爲在該代碼中它是tabs[0]
。
如果你在你的事件處理程序中使用console.log(tabNumber),你會發現它是3,不管你點擊了哪個項目。 – nnnnnn
儘可能地使用'let'作for循環,但這個問題可以通過關閉或你在JS代碼中引用它的地方來解決。 – Gary