2010-09-16 105 views
1

我把谷歌地圖標記插入陣列,並一切正常,當我做手工:JavaScript數組遍歷manualy作品,而是通過循環不

var m =[]; 

    m[0] = new google.maps.Marker(..... 

    google.maps.event.addListener(m[0], 'click', function() 
    { 
    alert('Markerklik'); 
    $("#trasa").append(m[0].getPosition().toString()+"<br>"); 
    }); 

    m[1] = new google.maps.Marker(..... 

    google.maps.event.addListener(m[1], 'click', function() 
    { 
    alert('Markerklik'); 
    $("#trasa").append(m[1].getPosition().toString()+"<br>"); 
    }); 

但是,如果我想用循環爲:

for (var i=0 ; i<2; i++) 
{ 
// do the same with m[i] 
} 

即時得到米[I]點擊標記時未定義(M [I] .getPosition())。

任何建議如何自動執行循環?

請注意,如果我把標記放入變量temp中,將偵聽器添加到temp並執行m.push(temp);在循環中 - 點擊任何標記給我最後添加標記的位置。

這看起來像添加事件到M [I]甚至不檢查我的價值,這不是找米[1]例如,而是要像變量「評爲」米[I]

如果我用m [0]和m [1]做所有的代碼 - 萬能工作正常,有事件連接到m [0]和m [1],但創建帶有for [m]看起來像結合事件不至m [0]和一個環M [1],但添加事件後 「M [I]」,當i是剛剛信,i的

不是一個值確定,看起來像來自一個響應的代碼SE工作

for (var i=0 ; i<2; i++) 
    { 
    (function(x) { 
    m[x] = new google.maps.Marker({ 
    position: getRandomPoint(), 
    title: 'Mojmarkers' 
    }); 

    google.maps.event.addListener(m[x], 'click', function() { 
    alert('Markerklik'); 
    $("#trasa").append(m[x].getPosition().toString()+"<br>"); 
    }); 

    return m[x]; 
    })(i); 
    } 

任何人都可以解釋爲什麼這不尋常的解決方案工作,因爲我想要的嗎?

+0

使用了... ...在在回答 – 2010-09-16 11:36:57

回答

2

您可以嘗試下面的代碼,它可能會出現閉合內存問題。

for (var i=0 ; i<2; i++) { 
    (function(i) { 
     m[x] = new google.maps.Marker(.... ; 
     return google.maps.event.addListener(m[x], 'click', function() { 
      alert('Markerklik'); 
      $("#trasa").append(m[x].getPosition().toString()+"<br>"); 
     }); 
    })(x); 
} 
+0

它的工作原理,但爲什麼?任何一種魔法? :) – 2010-09-16 11:49:35

+0

閉包失去循環內的可變內存; – 2010-09-16 11:54:58

0

嘗試從for聲明中刪除var

+0

沒有什麼變化了的建議,每個標記是在地圖和捕捉點擊,但嘗試獲得位置的原因「M [i]爲未定義」錯誤 – 2010-09-16 11:34:48

0

使用

m.push(new google.maps.marker...); 

然後作爲Pranay提到,使用通過米陣列length屬性和循環嘗試。

+0

這修改'未定義'的錯誤,但點擊捕捉無法正常工作 - 點擊任何標記,導致追加最後添加標記的位置。 – 2010-09-16 11:39:17

1

如果在返回標記的單獨函數中創建標記對象,在create函數中爲其添加事件偵聽器,然後將該對象放置在函數外的數組中,會發生什麼?

+0

如果我嘗試m [i] - 它會導致點擊錯誤(m [i]未定義),如果嘗試push() - 點擊每個標記給我最後添加的標記的座標,不是這個被點擊的點擊 – 2010-09-16 11:41:17

+0

我的編輯:「...在一個單獨的功能...」 – Tim 2010-09-16 11:47:47

+0

像其他反應顯示它,它的工作,但我不知道爲什麼 – 2010-09-16 11:54:38