0

我有一个应用程序,我在其中获取从一个位置到另一个位置的路线信息,可能在多个位置之间。在我的函数中,我正在循环检查检查的位置并使用 jQuery 写出到页面的方向。在循环的最后一次迭代中,“myRoute”变量变为未定义。所以,如果我有三个位置,它会在第三个位置投弹,但如果我使用相同的三个位置并添加第四个位置,则前三个位置有效,第四个投弹位置。我跟踪了 Firebug 中的行为,虽然 myRoute 变量确实被正确填充,但一旦它移动到下一行,它就会突然未定义。我删除了实例myRoute并替换为,directionResult.routes[0].legs[i]但仍然出现未定义的错误。这里发生了什么?

function setInstructions(directionResult, idname, start) {
//clean tour list
$('#tours_list .tour').remove();
$('#routeTitle').show();
var checkboxArray = $(".selector.Favs" + idname).find("li");
var idx = 0;

var linkMap = $('#routeTitle').find('.link-map')[0];
linkMap.href = __mapLink+'saddr=' + start;
var firstStop = true;
//iterate selected properties
for (var i = 0; i < checkboxArray.length; i++) {
    var curChk = checkboxArray[i];
    if ($(curChk).hasClass('active')) {        
        //get steps
        var myRoute = directionResult.routes[0].legs[i]; //this is what becomes undfined
        var title = $('<div>').addClass('mileage').append($('<p>').append($('<strong>').html(myRoute.distance.text + "<br /> about " + myRoute.duration.text)));
        var ol = $('<ol>').addClass('directions');
        for (var j = 0; j < myRoute.steps.length; j++) {
            var step = myRoute.steps[j];
            var li = $('<li>').append($('<div>').addClass('direction').html(step.instructions));
            li.append($('<div>').addClass('distance').html(step.distance.text + " - " + step.duration.text));
            ol.append(li);
        }                      
        //add tour with directions
        $('#tours_list').append(temp);          
    }
}

}

4

1 回答 1

1

问题是数组 indirectionResult.routes[0].legs并不长,checkboxArray.length因此您的代码试图访问超出 enddirectionResult.routes[0].legs并因此得到undefined.

仅测试活动类项目对您没有帮助,因为i从 0 到无所谓checkboxArray.length - 1


我不完全按照您要执行的操作,但是您可以通过仅迭代首先具有 .active 的项目来解决此问题,因此i永远不要超过活动项目的数量。你可以通过改变这个来做到这一点:

var checkboxArray = $(".selector.Favs" + idname).find("li");

对此:

var checkboxArray = $(".selector.Favs" + idname).find("li.active");

然后,删除if活动类的检查。这将使您的索引i永远不会高于活动项目的数量。


您也可以只保留您已处理的活动项目的计数器,并使用该计数器来索引directionResult.routes[0].legs[cntr]而不是使用i.

于 2013-11-09T22:06:29.647 回答