2016-04-14 11 views
3

を使用して、同じイベントハンドラを呼び出すボタンを作成し、同じハンドラを持つボタンでコンテナを作るが、このような異なる引数を取得することです。これを使用しては、私は基本的に行うには何をしようとしている標準のDOM操作

<div id="container"> 
    <button onclick="onclick_handler(1)">1</button> 
    <button onclick="onclick_handler(2)">2</button> 
    <button onclick="onclick_handler(3)">3</button> 
</div> 

を:

function onload_handler() { 
    var container = document.getElementById("container"); 
    var i; 
    for (i = 0; i < 3; i++) { 
     var button = document.createElement('button'); 
     button.innerHTML = i; 
     button.addEventListener('click', function() { 
      onclick_handler(i); 
     }); 
     container.appendChild(button); 
    } 
} 

function onclik_handler(val) { 
    console.log(val); 
} 

ボタンをクリックすると、私のコンソールに4が表示されます。私は間違って何をしていますか?

匿名関数を使用せずに行うこともできますか?

答えて

3

function onload_handler() { 
    var container = document.getElementById("container"); 
    var i; 
    for (i = 0; i < 3; i++) { 
     var button = document.createElement('button'); 
     button.innerHTML = i; 
     (function(i){ 
      button.addEventListener('click', function() { 
      onclick_handler(i); 
      }); 
     })(i) 
     container.appendChild(button); 
    } 
} 

function onclik_handler(val) { 
    console.log(val); 
} 
+0

、繰り返しごとにスコープを作成することによって、

function(i){ button.addEventListener('click', function() { onclick_handler(i); }); })(i); 

を閉鎖によって作成された問題を解決するために試してみて、あなたの完全なコードは次のようになりありがとうございました!出来た :) – Montreal

関連する問題