我有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
}
答案 0 :(得分:0)
您是否在代码中声明了一个body元素?
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;
答案 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的地方设置代码。
祝你好运