2013-11-09 67 views
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);   
    } 
} 

}

+3

顯而易見的問題是這個'directionResult.routes [0] .legs [i]'。 'directionResult.routes [0] .legs'中有多少項?如果少於'checkboxArray.length',這就可以解釋爲什麼你在循環結束時得到'undefined'。 – jfriend00

+0

checkboxArray中還有更多,但只有當該項目有一個活動類時纔會實例化該變量。如果我期望3(選擇3項),if語句如預期的那樣是真三次。我設置了一個斷點,第三次,myRoute在其中有正確的數據,但是當我下降到設置標題的位置時,myRoute突然沒有定義。 – clickatwill

+0

這是因爲'directionResult.routes [0] .legs'中的數組沒有足夠的項目 - 它太短了。當你下降到設置標題的那一行時,就是在這個迭代中設置了myRoute的時候(調試器還沒有執行被選擇的行)。添加一個'console.log(directionResult.routes [0] .legs.length)'看看它有多長。 – jfriend00

回答

1

的問題是,在directionResult.routes[0].legs數組是不是隻要checkboxArray.length使你的代碼試圖訪問超出directionResult.routes[0].legs結束,從而得到undefined

無論如何,i從0到checkboxArray.length - 1都不會幫助您僅測試活動類別項目。


我不完全地按照你想要做什麼,但你可能能夠通過只迭代有擺在首位。活躍的項目,以解決此所以i從未超越數有效物品。您可能能夠通過改變該做的:

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

這樣:

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

而且,然後取出if檢查活動類。這將使得你的索引i永遠不會高於活動項目的數量。


你也可以只保留您所處理的活動項目的計數器並使用該計數器指數爲directionResult.routes[0].legs[cntr]而不是使用i

+0

你在上面的評論中把我放在了正確的方向。我從我減去1,得到了正確的結果,但後來得到了相同的想法,只是得到匹配的列表項。感謝您的幫助! – clickatwill