我有一個應用程序,我從一個位置獲取路線信息到另一個位置,可能在多個位置之間。在我的函數中,我正在循環檢查位置並使用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 [i]'。 'directionResult.routes [0] .legs'中有多少項?如果少於'checkboxArray.length',這就可以解釋爲什麼你在循環結束時得到'undefined'。 – jfriend00
checkboxArray中還有更多,但只有當該項目有一個活動類時纔會實例化該變量。如果我期望3(選擇3項),if語句如預期的那樣是真三次。我設置了一個斷點,第三次,myRoute在其中有正確的數據,但是當我下降到設置標題的位置時,myRoute突然沒有定義。 – clickatwill
這是因爲'directionResult.routes [0] .legs'中的數組沒有足夠的項目 - 它太短了。當你下降到設置標題的那一行時,就是在這個迭代中設置了myRoute的時候(調試器還沒有執行被選擇的行)。添加一個'console.log(directionResult.routes [0] .legs.length)'看看它有多長。 – jfriend00