Javascript For循环拒绝循环;如果手动运行,效果非常好

Javascript For循环拒绝循环;如果手动运行,效果非常好,javascript,arrays,cordova,for-loop,Javascript,Arrays,Cordova,For Loop,好吧,希望这是一个足够简单的问题。我确信这一定是一些简单而愚蠢的事情,我做得不对。我正在开发一个应用程序,将我的锻炼计划编入其中,这样我就可以每周跟踪它(并使用Cordova学习应用程序开发)。在代码中,每次回到exercestup屏幕时,我都希望读取保存的练习文件,将其解析回一个对象数组,将这些对象转换回练习对象,然后在屏幕上显示它们。我有一个循环,它应该检查数组中的每个元素以处理信息,然后显示,然后重复,直到它对数组中的每个元素都这样做。对于第一个项目,它工作得非常好,然后停止。如果我多次手

好吧,希望这是一个足够简单的问题。我确信这一定是一些简单而愚蠢的事情,我做得不对。我正在开发一个应用程序,将我的锻炼计划编入其中,这样我就可以每周跟踪它(并使用Cordova学习应用程序开发)。在代码中,每次回到exercestup屏幕时,我都希望读取保存的练习文件,将其解析回一个对象数组,将这些对象转换回练习对象,然后在屏幕上显示它们。我有一个循环,它应该检查数组中的每个元素以处理信息,然后显示,然后重复,直到它对数组中的每个元素都这样做。对于第一个项目,它工作得非常好,然后停止。如果我多次手动运行循环,它的功能将非常完美。未列出的是函数addRow()的代码,该函数只是为输入添加一行格式化的下拉选择器,然后增加rowNum以跟踪它正在操作的行。非常感谢你们能提供的任何帮助。如果我需要提交更多信息,我很乐意这样做。下面是有问题的循环:

EDIT:修复了下面评论中的一些建议。代码的功能仍然相同。在第一次运行通过循环时工作正常,然后停止。如果我继续手动运行循环(在控制台中一遍又一遍地声明它),它可以正常工作,但由于某些原因,它不会运行“for”循环。为了方便起见,我还包括了for循环嵌套的函数的其余部分。

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
循环中?!