Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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_Handler - Fatal编程技术网

Javascript:动态生成处理程序

Javascript:动态生成处理程序,javascript,handler,Javascript,Handler,我正在用Javascript编程 我需要为onclick事件动态生成事件处理程序 以上代码如下: for (var i = 1; i < CurrValue; i++) { getId('btnReadRFIDTag_' + i).onclick = function () { ReadRFIDTag(getId('txtCode_' + i)); }; } 问题显然是,在运行时,i变量得到的是最新的值,而不是正确的值 但是我无法解决这个问题,

我正在用Javascript编程

我需要为onclick事件动态生成事件处理程序

以上代码如下:

for (var i = 1; i < CurrValue; i++) {
    getId('btnReadRFIDTag_' + i).onclick = function () 
    {
        ReadRFIDTag(getId('txtCode_' + i));
    };

}
问题显然是,在运行时,i变量得到的是最新的值,而不是正确的值

但是我无法解决这个问题,因为处理程序不允许函数使用参数

我怎样才能解决这个问题

多谢各位

祝你度过愉快的一天。

有三种选择:

使用生成器函数 通常的方法是为处理程序提供一个生成器函数:

for (var i = 1; i < CurrValue; i++) {
    getId('btnReadRFIDTag_' + i).onclick = buildHandler(i);
}
function buildHandler(index) {
    return function() {
        ReadRFIDTag(getId('txtCode_' + index));
    };
}
这样使用会创建不必要的额外函数,因此您也可以这样使用它:

// Using Function#bind (option 2)
for (var i = 1; i < CurrValue; i++) {
    var elm = getId('btnReadRFIDTag_' + i);
    elm.onclick = myHandler.bind(elm, i);
}

function myHandler(index) {
    ReadRFIDTag(getId('txtCode_' + index));
}
其工作方式是将click事件挂接到容器上,然后在click冒泡时挂起?对它来说,它查看点击的起源,并查看它或它的祖先是否是我们关心的按钮之一。如果是,我们将采取行动。

三个选项:

使用生成器函数 通常的方法是为处理程序提供一个生成器函数:

for (var i = 1; i < CurrValue; i++) {
    getId('btnReadRFIDTag_' + i).onclick = buildHandler(i);
}
function buildHandler(index) {
    return function() {
        ReadRFIDTag(getId('txtCode_' + index));
    };
}
这样使用会创建不必要的额外函数,因此您也可以这样使用它:

// Using Function#bind (option 2)
for (var i = 1; i < CurrValue; i++) {
    var elm = getId('btnReadRFIDTag_' + i);
    elm.onclick = myHandler.bind(elm, i);
}

function myHandler(index) {
    ReadRFIDTag(getId('txtCode_' + index));
}

其工作方式是将click事件挂接到容器上,然后在click冒泡时挂起?对它来说,它查看点击的起源,并查看它或它的祖先是否是我们关心的按钮之一。如果是,我们就采取行动。

可能重复的可能重复的可能重复的虽然我通常不会对已经被问了一千次的问题的答案给出加分,但我必须给出一个,因为这不是另一个让生命陷入循环的答案。。。so+1:-考虑把这个添加到FAQ中,也许会加上几个字,为什么他的代码不起作用。@谢谢。完成了。虽然我通常不会对被问了一千次的问题给出加分,但我必须给出一个加分,因为它不是另一个让生活陷入循环的答案。。。so+1:-考虑把这个添加到FAQ中,也许会加上几个字,为什么他的代码不起作用。@谢谢。完成。