我在内存中有一个文件名数组。我需要列出这些文件名的列表,按钮中的每个文件名在单击时会将用户带到另一个窗口。下面的代码成功完成了。但是,我还需要在每个文件名按钮旁边放置文件中包含的描述。因此,回调查找描述字段,这很有效。什么不起作用是获取回调查找描述以将其附加到包含它来自的文件名按钮的列表项。我在3天的努力中发现,回归的顺序似乎是随机的。那么,如何让文件描述与文件名按钮一起出现就是问题所在。如果回调中的nTestText保留了回调发布时的值,那么我认为下面的代码是可行的,它不像现在构造的那样。那么,我该怎样才能做到这一点。或者,也许有更好的方式。欢迎所有建议。
$('#stServerLoads').empty();
var nTestText=0;
for (iLoad=0; iLoad<nLoadsServer; iLoad++) {
filename=sServerLoadArray[iLoad];
if (filename.substring(0,4)=='TEST') {
$('#stServerLoads').append('<li><button class="load">' + filename.substring(0,filename.length-6) + '</button></li>');
$('button').eq(iButton).on('click', {value:filename}, function(event) {
...
window.location='load.html';
});
iButton++;
$.getJSON('reports/' + filename,function(new_ld) {
$('#stServerLoads li').eq(nTestText).append(' ' + new_ld.testtext);
nTestText++;
});
}
}
答案 0 :(得分:1)
如果我理解你,这可以解决你的问题:
$('#stServerLoads').empty();
for (var i=0; i<nLoadsServer; i++) { //changed counter name here
(function(iLoad){ //We add a closure
filename=sServerLoadArray[iLoad];
if (filename.substring(0,4)=='TEST') {
$('#stServerLoads').append('<li><button class="load">' + filename.substring(0,filename.length-6) + '</button></li>');
$('button').eq(iButton).on('click', {value:filename}, function(event) {
...
window.location='load.html';
});
iButton++;
$.getJSON('reports/' + filename,function(new_ld) {
$('#stServerLoads li').eq(iLoad).append(' ' + new_ld.testtext);
});
}
})(i); //Calling closure function with counter value
}
问题在于iLoad var因for循环而被覆盖。 (作为解决方案尝试,您添加了nTestText
var,对吗?)。但是,通过添加闭包,每个循环周期都有自己的iLoad变量,因此它不会被覆盖,并且它可以完美地工作:)。