一次将onkeyup事件分配给多个对象

时间:2013-12-25 00:35:30

标签: javascript qualtrics

我正在使用qualtrics,我正在尝试自定义他们的矩阵控件。我试图循环一个8行4列的矩阵,其中每个单元格包含一个文本框,并为每个文本框分配一个onkeyup事件,如下所示:

for (var j=1; j< 9; j++){
        row_txt[j] = [];
        for (var k=1; k<5; k++){
            txt1= $('QR~QID2~'+j+'~'+k);
            txt1.onkeyup=function(){alert(j+','+k);};
        }
}

但是,onkeyup事件会为每个更改的文本框返回“9,5”。为什么不显示正确的指数?如何将相同的onkeyup事件分配给具有相应参数j和k的多个对象?

谢谢

1 个答案:

答案 0 :(得分:2)

jk的值问题是实际的keyup事件将在某个时间发生。当该事件发生时,jk的值已经到达for循环的末尾,因此所有事件处理程序都将显示相同的值。

解决此问题的常用方法是添加一个闭包,为每个事件处理程序分别冻结jk的值。

for (var j=1; j< 9; j++){
    row_txt[j] = [];
    for (var k=1; k<5; k++){
        (function(j, k) {
            txt1= $('QR~QID2~'+j+'~'+k);
            txt1.onkeyup=function(){alert(j+','+k);};
        })(j, k);
    }
}

另外,我很好奇你在做什么:

$('QR~QID2~'+j+'~'+k);

这将创建这样的东西:

$('QR~QID2~1~9);

您实际使用的是带有该标记名的HTML标记,还是应该是类名称或ID(例如前缀为.#)?