2016-07-17 5 views
1

私はfoorループ経由でhtml要素にいくつかのクラスを適用しようとしています。問題は、ループ変数が正しく動作しないことです。ループ内でイベントハンドラが正しく動作しない

'use strict' 

    window.onload = function(){ 
    var elements = document.getElementsByTagName("div") 

    for(var i = 0; i < elements.length; i++){ 
     elements[i].addEventListener("click", a(this, i), false) 
    } 

    function a(e, x){ 
     if(!e.className){ 
     e.className = "class".concat(x) 
     } 
     else { 
     e.classList.remove(e.className) 
     } 
    } 
    } 
div{ 
    background-color: red; 
    } 

    .class0{ 
    background-color: blue; 
    } 

    .class1{ 
    background-color: purple; 
    } 
+0

'a(this、i)'、 'this'は' window'グローバルオブジェクトです。 –

+0

これを削除して 'i'を入れますか? – ZenKurd

+0

あなたは 'a.bind(elements [i]、i)'のようなことをすると思います。 –

答えて

0

@Patrickはこれを行う示唆したように:

window.onload = function(){ 
    var elements = document.getElementsByTagName("div") 

    for(var i = 0; i < elements.length; i++){ 
     elements[i].addEventListener("click", a.bind(window, elements[i],i), false) 
    } 

    function a(e, x){ 
     if(!e.className){ 
     e.className = "class".concat(x) 
     } 
     else { 
     e.classList.remove(e.className) 
     } 
    } 
    } 

あなたが関数Aを呼び出し、イベントハンドラとしてその結果を割り当てました。

バインドを使用すると、aを呼び出す関数を作成し、要素とインデックスを引数として渡します。

関連する問題