2017-12-18 5 views
0

複数の要素にイベントを追加しようとしていますが、今はこのコードがありますが、動作しますが、SetTimeoutを追加したくありません。私がそれを取り除くと、うまくいかない。Javascriptで複数の要素にイベントをアタッチする

これはなぜ起こっているのですか?これにはより良い解決策がありますか?

setTimeout(function() { 
    var imageElements = document.querySelectorAll("img[class^='image']"); 
    for (var i = 0; i < imageElements.length; i++) { 
     imageElements[i].addEventListener("click" , function(){ 
      definition(this.classList[0], this); 
     }) 
    } 
},200); 
+1

実際の要素がロードされる前にこのスクリプトが実行されている可能性はありますか?スクリプトタグはhtmlの本体の上にありますか? –

+1

イメージは、DOMにまだロードされていない可能性が非常に高いです。コードの残りの部分を見ることなく伝えるのは難しいです。 – Mvarta

+0

@Mvartaはい、そうです。 – Luis

答えて

3

イベントハンドラを、まだ作成されていないDOMに用意されている要素に追加しようとしているためです。

以下を使用して、あなたのコードはIEの古いバージョンのmyFunction()

window.addEventListener('load', myFunction, false) 

内にある必要があり、それは使用しています:

document.attachEvent("onreadystatechange", myFunction); 
//or 
window.attachEvent("onload", myFunction); 
+0

はい、試してみましたが動作しません。 – Luis

+0

window.onload = myFunction;身体のタグで使用してください。 – msoliman

0

をいくつかES6の矢印の機能を使用すると、forEachの

let imageElements = document.querySelectorAll("img[class^='image']"); 

imageElements.forEach(image => image.addEventListener('click', function(){ 
    definition(this.classList[0], this); 
}); 
関連する問題