2015-12-17 29 views
1

我正在研究一小段有趣的代碼,我被卡住了。無法定義數據。爲什麼是這樣?

在JS文件中的第66行。它不能定義數據......它的範圍正確嗎?

請幫幫我。

http://codepen.io/shiva112/pen/JGXoVJ

function PlaceMarkers(data){ 
    for (i = 0; i < data.length - 1; ++i) { 
    if (data[i].country == "NL"){ 

     map.addMarker({ 
      lat: data[i].lat, 
      lng: data[i].lng, 
      title: 'Marker with InfoWindow', 
      infoWindow: {content: "Station: " + data[i].name}, 
      click: function(e) { 
      $("#info h2").remove(); 
      $("#info").append("<h2>U hebt station " + data[i].name + " geselecteerd.</h2>"); 
      } 
     }); 

    } 
    } 

追加線無法正常工作。數據[我]。名稱2行以上是在範圍內!但爲什麼不在附加行中輸入數據[i] .name ..

+2

請出示你的代碼的相關部分* *在這裏。 – isherwood

+0

將代碼發佈到此處而不是在外部網站上非常重要。一方面,它不會強迫人們打開兩個窗口,其次意味着資源將來不會隨機過期,並使這個問題無用。只需粘貼問題所在的* minimal *示例,就可以獲得更好的響應率。 – tadman

+0

對不起,我更新了帖子.. –

回答

4

data[i].name直到for循環完成後,纔會評估點擊處理程序中的值,並且值已更改。您可以創建一個立即調用的函數表達式來解決這個問題:

function PlaceMarkers(data) { 
    for (i = 0; i < data.length; ++i) { 
    if (data[i].country == "NL") { 
     (function(station) { 
     map.addMarker({ 
      lat: station.lat, 
      lng: station.lng, 
      title: 'Marker with InfoWindow', 
      infoWindow: { 
      content: "Station: " + station.name 
      }, 
      click: function(e) { 
      $("#info h2").remove(); 
      $("#info").append("<h2>U hebt station " + station.name + " geselecteerd.</h2>"); 
      } 
     }); 

     })(data[i]); 

    } 
    } 
} 

http://codepen.io/anon/pen/obxzmG

0

像@JasonP說,在單擊處理i沒有評估,直到for循環結束後。

您可以設置自定義鍵name,然後使用this.name這樣的訪問:

map.addMarker({ 
    lat: data[i].lat, 
    lng: data[i].lng, 
    name: data[i].name, 
    title: 'Marker with InfoWindow', 
    infoWindow: {content: "Station: " + data[i].name}, 
    click: function(e) { 
     $("#info h2").remove(); 
     $("#info").append("<h2>U hebt station " + this.name + " geselecteerd.</h2>"); 
    } 
}); 

http://codepen.io/pespantelis/pen/LGNRgL