Javascript For循环拒绝循环;如果手动运行,效果非常好
好吧,希望这是一个足够简单的问题。我确信这一定是一些简单而愚蠢的事情,我做得不对。我正在开发一个应用程序,将我的锻炼计划编入其中,这样我就可以每周跟踪它(并使用Cordova学习应用程序开发)。在代码中,每次回到exercestup屏幕时,我都希望读取保存的练习文件,将其解析回一个对象数组,将这些对象转换回练习对象,然后在屏幕上显示它们。我有一个循环,它应该检查数组中的每个元素以处理信息,然后显示,然后重复,直到它对数组中的每个元素都这样做。对于第一个项目,它工作得非常好,然后停止。如果我多次手动运行循环,它的功能将非常完美。未列出的是函数addRow()的代码,该函数只是为输入添加一行格式化的下拉选择器,然后增加rowNum以跟踪它正在操作的行。非常感谢你们能提供的任何帮助。如果我需要提交更多信息,我很乐意这样做。下面是有问题的循环: EDIT:修复了下面评论中的一些建议。代码的功能仍然相同。在第一次运行通过循环时工作正常,然后停止。如果我继续手动运行循环(在控制台中一遍又一遍地声明它),它可以正常工作,但由于某些原因,它不会运行“for”循环。为了方便起见,我还包括了for循环嵌套的函数的其余部分。Javascript For循环拒绝循环;如果手动运行,效果非常好,javascript,arrays,cordova,for-loop,Javascript,Arrays,Cordova,For Loop,好吧,希望这是一个足够简单的问题。我确信这一定是一些简单而愚蠢的事情,我做得不对。我正在开发一个应用程序,将我的锻炼计划编入其中,这样我就可以每周跟踪它(并使用Cordova学习应用程序开发)。在代码中,每次回到exercestup屏幕时,我都希望读取保存的练习文件,将其解析回一个对象数组,将这些对象转换回练习对象,然后在屏幕上显示它们。我有一个循环,它应该检查数组中的每个元素以处理信息,然后显示,然后重复,直到它对数组中的每个元素都这样做。对于第一个项目,它工作得非常好,然后停止。如果我多次手
function readRout()
{
console.log("Reading routine...");
document.addEventListener('deviceready', getFile, false);
function getFile()
{
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(dir)
{
console.log("got main dir",dir);
dir.getFile("exerciseroutine.txt", {create:true}, function(file)
{
console.log("got the file", file);
exerLog = file;
console.log(exerLog);
});
});
document.addEventListener('deviceready', logOut, false);
}
function logOut()
{
setTimeout(readLog, 50);
}
function readLog()
{
exerLog.file(function(file)
{
var reader = new FileReader();
reader.onloadend = function(e)
{
console.log(this.result);
exerRoutine = JSON.parse(this.result);
//console.log(exerRoutine);
//console.log(exerRoutine[0]);
var looper = exerRoutine.length + 1;
for (var i=0; i<looper; i++)
{
console.log("Loop count is: " + i);
console.log(looper);
exerRoutine[i] = new exercise(exerRoutine[i].type, exerRoutine[i].name, exerRoutine[i].sets, exerRoutine[i].reps, exerRoutine[i].pace);
console.log(exerRoutine[i]);
console.log(exerRoutine[i].description());
console.log(exerRoutine[i].type);
console.log(exerRoutine[i].name);
console.log(exerRoutine[i].sets);
console.log(exerRoutine[i].reps);
console.log(exerRoutine[i].pace);
addRow();
setTimeout(fillExer, 50);
console.log(exerRoutine);
}
console.log(looper);
};
reader.readAsText(file);
}, fail);
}
function fillExer()
{
var typeRow = "typeSel" + rowNum;
console.log(typeRow);
console.log(document.getElementById(typeRow));
var nameRow = "nameSel" + rowNum;
var setsRow = "setsSel" + rowNum;
var repsRow = "repsSel" + rowNum;
var paceRow = "paceSel" + rowNum;
fillType(typeRow);
setTimeout(fillName, 10, nameRow);
fillSets(setsRow);
fillReps(repsRow);
fillPace(paceRow);
}
function fillType(typek)
{
for (var k=0; k<document.getElementById(typek).options.length; k++)
{
//console.log(document.getElementById(typek).options.length);
console.log(exerRoutine[rowNum-1].type);
if(document.getElementById(typek).options[k].value == exerRoutine[rowNum-1].type)
{
document.getElementById(typek).selectedIndex = k;
//console.log(document.getElementById(typei).selectedIndex);
var quer = "#" + typek;
//console.log(query);
var typeInput = document.querySelector(quer);
//console.log(typeInput);
TypeSelect(typeInput);
return;
}
}
}
function fillName(namek)
{
for (var k=0; k<document.getElementById(namek).options.length; k++)
{
//console.log(document.getElementById(namek).options.length);
console.log(exerRoutine[rowNum-1].name);
if(document.getElementById(namek).options[k].value === exerRoutine[rowNum-1].name)
{
document.getElementById(namek).selectedIndex = k;
//console.log(document.getElementById(namei).selectedIndex);
return;
}
}
}
function fillSets(setsk)
{
for (var k=0; k<document.getElementById(setsk).options.length; k++)
{
console.log(exerRoutine[rowNum-1].sets);
if(document.getElementById(setsk).options[k].value === exerRoutine[rowNum-1].sets)
{
document.getElementById(setsk).selectedIndex = k;
//console.log(document.getElementById(setsk).selectedIndex);
return;
}
}
}
function fillReps(repsk)
{
for (var k=0; k<document.getElementById(repsk).options.length; k++)
{
console.log(exerRoutine[rowNum-1].reps);
if(document.getElementById(repsk).options[k].value === exerRoutine[rowNum-1].reps)
{
document.getElementById(repsk).selectedIndex = k;
//console.log(document.getElementById(repsi).selectedIndex);
return;
}
}
}
function fillPace(pacek)
{
for (var k=0; k<document.getElementById(pacek).options.length; k++)
{
console.log(exerRoutine[rowNum-1].pace);
if(document.getElementById(pacek).options[k].value === exerRoutine[rowNum-1].pace)
{
document.getElementById(pacek).selectedIndex = k;
//console.log(document.getElementById(pacek).selectedIndex);
return;
}
}
}
}
函数readRout()
{
日志(“读取例程…”);
document.addEventListener('deviceready',getFile,false);
函数getFile()
{
resolveLocalFileSystemURL(cordova.file.dataDirectory,函数(dir)
{
log(“获取主目录”,目录);
dir.getFile(“exerciseroutine.txt”,{create:true},函数(文件)
{
log(“获取文件”,file);
exerLog=文件;
控制台日志(exerLog);
});
});
文件。添加的监听器('deviceready',注销,虚假);
}
函数注销()
{
设置超时(读取日志,50);
}
函数readLog()
{
exerLog.file(函数(文件)
{
var reader=new FileReader();
reader.onloadend=函数(e)
{
console.log(this.result);
exerRoutine=JSON.parse(this.result);
//控制台日志(exercroutine);
//console.log(exercroutine[0]);
var looper=exerRoutine.length+1;
for(var i=0;i请用合理的缩进设置代码的格式,使其在您的问题中清晰可见。为什么额外的+
在这里签名:var looper=exerRoutine.length++1;
?您是否在调试控制台中看到任何错误?为什么函数声明在for循环中?函数是否嵌套在for
循环中?!