oor*_*ile 0 html javascript function
代码如下:
loop(n times)
create HTML Button Element
count++;
assign onclick event = function(){
openSomething("Value_"+count)
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我创建3个输入元素(n = 3),然后返回单击三个按钮中的任何一个,则每次只调用openSomething("Value _"+ 3).
为什么openSomething("Value _"+ 1)和openSomething("Value _"+ 2)没有被调用?
我不知道发生了什么可能是范围问题,但我也不太了解范围,任何帮助推动我朝着正确的方向非常感激.
我的原始代码
var count = 0;
for(var i =0;i<someValue;i++){
count++;
var button = document.createElement("img");
button.src = "/images/small_button.gif";
button.imageButton = true;
button.srcBase = "/images/small_button";
button.onclick = function () {
selectSomething("someIdText_"+count);};
cell.appendChild(button);
}
Run Code Online (Sandbox Code Playgroud)
因为JavaScript没有变量的块级范围,因此所有内容都限定在函数范围内.这意味着当你有一个代码在稍后使用变量(比如你的循环计数器n或你的count变量)时(即在完全执行函数之后),它的值将被设置为循环的最后一个值.您需要在循环内部创建一个闭包(变量的新作用域).这样的事情(因为你没有发布你的实际代码):
for(var i = 0, l = list.length; i < l; i++) {
(function(count) {
something.onclick = function() {
openSomething("Value_" + count);
}
})(i);
}
Run Code Online (Sandbox Code Playgroud)