2017-03-12 11 views
0

関数に引数を渡すことをwan'tしても、引数が常に同じ(最後の引数と同じ)に送信されないときは、onclickに問題があります。私のバグは何ですか?javascript onclick関数を追加する

var N = 5; 
    var btns = []; 
    for(var opt = 0 ; opt < N ; ++opt){ 
     var resp = "option #" + opt; 

     var options = document.createElement('input'); 
     options.setAttribute('type' , 'button'); 
     options.setAttribute('value' , resp); 
     options.addEventListener('click' , function(){ 
      doClick(resp); 
     }); 

     btns.push(options); 
    } 
    var divMain = document.getElementById('mainDiv'); 
    for(var i = 0 ; i < btns.length ; ++i){ 
     divMain.appendChild(btns[i]); // add btns to main div 
    } 

答えて

0

コード例:この例では

  var N = 5; 
     var btns = []; 
     for(var opt = 0 ; opt < N ; ++opt){ 
      var resp = "option #" + opt; 
      var resp=opt; 
      var options = document.createElement('input'); 
      options.setAttribute('type' , 'button'); 
      options.setAttribute('value' , resp); 
      options.onclick= 
       (function(opt) { 
        return function() { 
         console.log("res: ",opt); 
       } 
       })(opt); 

      btns.push(options); 
     } 
     var divMain = document.getElementById('mainDiv'); 
     for(var i = 0 ; i < btns.length ; ++i){ 
      divMain.appendChild(btns[i]); // add btns to main div 
     } 

ボタン上のすべてのクリックは、切り抜いた値が表示されます。ですから、console.logを書く場所にコードを設定してください。

幸運

+0

それは私の解決策です。 –

0

コードにbody要素を宣言しましたか?あなたはclosuresを使用する必要が

var N = 5; 
 
    var btns = []; 
 
    for(var opt = 0 ; opt < N ; ++opt){ 
 
     var resp = "option #" + opt; 
 

 
     var options = document.createElement('input'); 
 
     options.setAttribute('type' , 'button'); 
 
     options.setAttribute('value' , resp); 
 
     options.addEventListener('click' , function(){ 
 
      doClick(resp); 
 
     }); 
 

 
     btns.push(options); 
 
    } 
 
    var divMain = document.getElementById('mainDiv'); 
 
    for(var i = 0 ; i < btns.length ; ++i){ 
 
     divMain.appendChild(btns[i]); // add btns to main div 
 
    }
<html> 
 
<body> 
 
<div id='mainDiv'></div> 
 
</body> 
 
</html>

+0

要素は、mainDivに追加しますが、onclickの仕事は引数が同じ要素を送信します。ありがとう。 –

関連する問題