문제

I am working with qualtrics and I am trying to customize their matrix control. I am trying to loop through a matrix with 8 rows and 4 columns where each cell contains a textbox and assign each textbox an onkeyup event like so:

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);};
        }
}

However, the onkeyup event returns "9,5" for each textbox changed. Why isn't it displaying the correct indices? How can I assign the same onkeyup event to multiple objects with the corresponding parameters j and k ?

Thank you

도움이 되었습니까?

해결책

The issue with the value of j and k is that the actual keyup event occurs sometime in the future. When that event occurs, the values of j and k have gotten to the end of the for loop and thus all event handlers will show the same values.

The usual way to fix this is by adding a closure that freezes the values of j and k separately for each event handler.

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);
    }
}

Also, I'm curious what you're doing with this:

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

That will create something like this:

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

Are you actually using HTML tags with that tagname or should this be a class name or an id (e.g prefaced with a . or #)?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top