添加javascript onclick功能

时间:2017-03-12 13:00:12

标签: javascript arrays onclick

我有onclick的问题,当我不想向函数发送参数时,参数总是发送到函数相同(与最后一个参数相同)。我的bug是什么?

    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
    }

2 个答案:

答案 0 :(得分:0)

您是否在代码中声明了一个body元素?

&#13;
&#13;
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
    }
&#13;
<html>
<body>
<div id='mainDiv'></div>
</body>
</html>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您需要使用closures

代码示例:

           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的地方设置代码。

祝你好运