1

我正在使用 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 的多个对象?

谢谢

4

1 回答 1

2

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

解决此问题的常用方法是添加一个闭包,该闭包冻结每个事件处理程序的值j和单独的值。k

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(例如以 a.或开头#)?

于 2013-12-25T00:48:49.640 回答