2013-11-01 55 views
0

我正嘗試用兩個標記(每個地圖上的一個標記)創建兩個地圖。不能爲兩位聽衆使用相同的功能

在拖動標記時,其位置在頁面中的DIV元素中更新。在移動地圖時,標記將移動到地圖的中心,然後再次更新DIV元素。

我已經創建了相應更改的功能。爲了確定要檢查或移動哪個標記或地圖,我在函數中傳遞了地圖或標記變量。

但是,顯示奇怪行爲的地圖。在試圖拖動標記時,它會附加到我的鼠標指針上,永遠不會放在地圖上,也不會觸發任何事件。 此外,移動地圖不會做任何事情。

如果我分別聲明函數爲每個標誌或地圖的形式

addListener(marker, 'drag', function() { //some code }); 

它工作完全正常。

不確定發生了什麼問題。

這裏是代碼片段:

//add a listener for the marker movement 
google.maps.event.addListener(marker_start, 'drag', handleMarkerDrag(marker_start, 1)); 
google.maps.event.addListener(marker_end, 'drag', handleMarkerDrag(marker_end, 2)); 

//add a listener for the map 
google.maps.event.addListener(map_start, 'dragend', handleMapDragend(map_start, marker_start, 1)); 
google.maps.event.addListener(map_end, 'dragend', handleMapDragend(map_end, marker_end, 2)); 

和它們的功能在處理事件:

function handleMarkerDrag(marker, x) 
{ 
    //get the current location of the marker 
    var marker_pos = marker.getPosition(); 
    //convert lat-lang datastructure into individual latitude and longitude 
    var lat = marker_pos.lat(); 
    var lng = marker_pos.lng(); 
    //now update the content in the html page 
    if(x == 1) 
    { 
     document.getElementById("longitude_start").innerHTML = lng+'<input type="hidden" name="longitude_start" value='+lng+'>'; 
     document.getElementById("latitude_start").innerHTML = lat+'<input type="hidden" name="latitude_start" value='+lat+'>'; 
    } 
    else 
    { 
     document.getElementById("longitude_end").innerHTML = lng+'<input type="hidden" name="longitude_end" value='+lng+'>'; 
     document.getElementById("latitude_end").innerHTML = lat+'<input type="hidden" name="latitude_end" value='+lat+'>'; 
    } 
} 

function handleMapDragend(map, marker, x) 
{ 
    //get the current location of the marker 
    var marker_pos = map.getCenter(); 
    //set marker to the enter of the map 
    marker.setPosition(marker_pos); 
    //convert lat-lang datastructure into individual latitude and longitude 
    var lat = marker_pos.lat(); 
    var lng = marker_pos.lng(); 
    //now update the content in the html page 
    if(x == 1) 
    { 

     document.getElementById("longitude_start").innerHTML = lng+'<input type="hidden" name="longitude_start" value='+lng+'>'; 
     document.getElementById("latitude_start").innerHTML = lat+'<input type="hidden" name="latitude_start" value='+lat+'>'; 
    } 
    else 
    { 
     document.getElementById("longitude_end").innerHTML = lng+'<input type="hidden" name="longitude_end" value='+lng+'>'; 
     document.getElementById("latitude_end").innerHTML = lat+'<input type="hidden" name="latitude_end" value='+lat+'>'; 
    }  
} 
+0

哦,和marker_start,marker_end,map_start,map_end都是全球性的。無論如何,我認爲這並不重要。 –

回答

1

如果我分別聲明該函數在形式各標記或地圖它完美精細。不知道發生了什麼問題。

區別在於第一次嘗試提供了一個函數作爲參數,但另一次嘗試(失敗)是一個函數調用(將立即執行)。

包裹函數調用到一個匿名函數:

//add a listener for the marker movement 
google.maps.event.addListener(marker_start, 'drag', function(){handleMarkerDrag(marker_start, 1);}); 
google.maps.event.addListener(marker_end, 'drag', function(){handleMarkerDrag(marker_end, 2);}); 

//add a listener for the map 
google.maps.event.addListener(map_start, 'dragend', function(){handleMapDragend(map_start, marker_start, 1);}); 
google.maps.event.addListener(map_end, 'dragend', function(){handleMapDragend(map_end, marker_end, 2);}); 
+0

太棒了!有用。而且,就像你說的那樣,在我失敗的嘗試中,函數WAS被立即調用一次。 我仍然不明白,爲什麼標記粘在鼠標指針上。 –