私の質問は簡単です。for ループ内で setTimeout を使用しています。実行時に次のようなエラーが生成されます。
Uncaught TypeError: Cannot call method 'setAttribute' of undefined
私のjavascriptの経験はわずかで(学習のためにjQueryをスキップしています)、setTimeoutを呼び出す方法に何かがあると思います。
私の関数を見てください。無名関数内から「要素」を使用できない理由を知りたいです。
function hide_visable_elements()
{
// remove body EventListener
var body = document.getElementsByTagName("body");
body[0].removeEventListener("click", hide_visable_elements, true);
var elements = document.getElementsByClassName("visible");
for (var i = 0; i < elements.length; ++i)
{
elements[i].removeAttribute("class");
setTimeout(function() { elements[i].setAttribute("class", "hidden") }, 300);
}
}