Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有动态生成参数的Javascript函数_Javascript_Html_Function - Fatal编程技术网

具有动态生成参数的Javascript函数

具有动态生成参数的Javascript函数,javascript,html,function,Javascript,Html,Function,以下代码: loop(n times) create HTML Button Element count++; assign onclick event = function(){ openSomething("Value_"+count) } 因此,如果我创建了3个输入元素(n=3),然后返回,单击三个按钮中的任何一个,那么每次只调用openSomethi

以下代码:

 loop(n times)
    create HTML Button Element
    count++;
    assign onclick event = function(){
                            openSomething("Value_"+count)
                            }
因此,如果我创建了3个输入元素(n=3),然后返回,单击三个按钮中的任何一个,那么每次只调用openSomething(“Value_”+3”)

为什么openSomething(“值”+1)和openSomething(“值”+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);

    }
var计数=0;

对于(var i=0;i,因为JavaScript没有变量的块级作用域,因此所有内容都限定在函数的作用域内。这意味着,当您的代码在稍后的时间点(即在函数完全执行之后)使用变量时(如循环计数器
n
count
变量),它的值将设置为循环的最后一个值。您需要在循环内创建一个闭包(变量的新范围)。类似这样的内容(因为您没有发布实际代码):

for(变量i=0,l=list.length;i
为了更现代的使用方法, 适用于firefox、chrome和node

如果需要针对所有浏览器,请使用Anthony方法

for(var count = 0, l = list.length; count < l; count++) {
    let count;
    something.onclick = function() {
        openSomething("Value_" + count);
    }
}
for(var count=0,l=list.length;count
向我们展示您的原始代码……我认为每次单击事件调用都不会更新计数,或者您在不同的函数中定义了计数并将该值传递给openSomething函数?@enyce12请查看原始代码谢谢,但如果我在创建元素并分配事件时遵循您的建议,它将运行函数自动打开一些我不想要的东西。不过我找到了解决方案
for(var count = 0, l = list.length; count < l; count++) {
    let count;
    something.onclick = function() {
        openSomething("Value_" + count);
    }
}