我經歷JavaScript權威指南 David Flanagan着的,我被困在下面的例子:一個循環內固定封閉
window.onload = function() {
var elements = document.getElementsByClassName("reveal");
for(var i = 0; i < elements.length; i++) {
var elt = elements[i];
var title = elt.getElementsByClassName("handle")[0];
title.onclick = function() {
if(elt.className == "reveal") elt.className = "revealed";
else if(elt.className == "revealed") elt.className = "reveal;"
}
}
};
<div class="reveal">
<h1 class="handle">Click Here to Reveal Hidden Text</h1>
<p>This paragraph is hidden. It appears when you click on the title.</p>
</div>
的問題是,在目前形式的代碼作品,但如果我要添加多個div
與類reveal
,無論我點擊什麼h1
元素,只有最後一個會展開。我應該在代碼中更改哪些內容才能在獨立的div上工作?
P.S.我確實明白,由於問題的本質是循環中的閉包,所以這種問題經常被問到,但是我不能使我的代碼在SO上類似問題的解決方案中工作。謝謝。
我會用事件代理並綁定到容器中,這樣一來,任何添加之後準備去。 – dandavis
有點更好閱讀,但可以使用'var title = elt.querySelector(「。handle」);'而不是手動返回HTML集合的第一個實例。 –
請向我們展示您嘗試使用閉包。這確實是解決方案。 – Bergi