簡體   English   中英

變量在循環的最后迭代中變得不確定

[英]Variable Becomes Undefined in Last Iteration of Loop

我有一個應用程序,在其中我可以從一個位置到另一位置(可能在多個位置之間)獲取路線信息。 在我的函數中,我遍歷檢查的位置並使用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);          
    }
}

}

問題在於, directionResult.routes[0].legs中的數組不如checkboxArray.length長,因此您的代碼嘗試訪問的directionResult.routes[0].legs超出了directionResult.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM