2012-02-23 68 views
3

我有一個谷歌地圖,用戶可以點擊地圖插入帶有信息窗口形式的標記,以便他們可以編輯數據並將其保存到數據庫。它類似於此:將谷歌地圖可拖動標記的lat&lng更新傳遞到另一頁

http://code.google.com/apis/maps/articles/phpsqlinfo_v3.html

,但我做了我的標記爲可拖動。如何將更新的經緯度傳遞給另一個PHP頁面以更新數據庫?

目前,我這樣做:

function updateMarkerPosition(latLng) 
{ 
    document.getElementById('add_lat').value = latLng.lat(); 
    document.getElementById('add_lng').value = latLng.lng(); 
} 

function add_editable_mkr() 
{ 
    google.maps.event.addListener(map, 'click', function(event) 
    { 
     var marker_drag = new google.maps.Marker(
     { 
      position: event.latLng, 
      draggable:true, 
      map: map, 
      icon: icon2 
     });      

     // Infowindow form 
     var html = '<div>'+ 
        '<form name="add_data" action="phpinsert.php">'+ 
          '<input type="text" name="add_lat" value=""/>'+ 
          '<input type="text" name="add_lng" value=""/>'+   
        '</form>'+ 
        '</div>';        

     var popup_form = new google.maps.InfoWindow 
     ({  
      maxWidth:800 
     }); 

     google.maps.event.addListener(marker_drag, "click", function() 
     { 
      popup_form.setContent(html);       
      popup_form.open(map, marker_drag); 
     }); 

     google.maps.event.addListener(marker_drag, 'drag', function() 
     { 
      updateMarkerPosition(marker_drag.getPosition()); 
     }); 

    }); 
} 

function initialize() 
{ 
    map = new google.maps.Map(document.getElementById("map"), 
    { 
     center: new google.maps.LatLng(1.364236,103.796082), 
     zoom: 4, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     mapTypeControl: true, 
     mapTypeControlOptions: 
     { 
      style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR 
     }, 
     navigationControl: true, 
     navigationControlOptions: 
     { 
      style: google.maps.NavigationControlStyle.LARGE 
     } 
    }); 


    add_editable_mkr(); 
} 

但值被傳遞到我的其他頁面作爲空值。有沒有其他方法可以做到這一點?

在此先感謝!

回答

2

在我看來,你的文本輸入沒有id屬性。 所以,你可以給他們一個id屬性或形式

參考他們試試這個,你設置你的HTML,讓我知道如何去:

var html = '<div>'+ 
      '<form name="add_data" action="phpinsert.php">'+ 
       '<input type="text" name="add_lat" id="add_lat" value=""/>'+ 
       '<input type="text" name="add_lng" id="add_lng" value=""/>'+   
      '</form>'+ 
      '</div>'; 
+0

我試過放入ID但它不起作用。我想知道是否因爲我這樣創建了HTML表單,所以我無法通過getElementbyID更新該表單的實例? 我一直在想通過其他方式通過更新的緯度/經度到我的其他頁面,但無法找到任何 – user1224015 2012-02-23 08:15:33

0

OK,理解了它。 Google地圖不只是將HTML放在文檔上。我不確定幕後發生了什麼,但我認爲它以某種方式克隆內容。似乎有2個輸入標籤的id爲add_lat。所以,你必須通過它的類名來獲取元素並且以這種方式進行更新。這是文檔中的第二個元素。如果您使用jQuery,則可以輕鬆更新頁面上任何位置具有特定類名稱的所有元素。

此外,我發現各種奇怪的事情與你寫的代碼發生。因此,我很快將其重寫爲只有一個標記,並且在地圖上只有一個infowindow。您可以點擊標記來顯示當前位置並拖動它來更新位置。

試試這個代碼,讓我知道你在想什麼。

function updateMarkerPosition(latLng) 
{ 
    document.getElementsByClassName('add_lat')[1].value = latLng.lat(); 
    document.getElementsByClassName('add_lng')[1].value = latLng.lng(); 
} 

function add_editable_mkr() 
{ 
    var popup_form = new google.maps.InfoWindow({  
     maxWidth:800 
    }); 

    // Infowindow form 
    var html = '<div>'+ 
        '<form name="add_data" action="phpinsert.php">'+ 
          '<input type="text" class="add_lat" name="add_lat" value=""/>'+ 
          '<input type="text" class="add_lng" name="add_lng" value=""/>'+   
        '</form>'+ 
        '</div>'; 

    popup_form.setContent(html); 

    var marker_drag = new google.maps.Marker(
    { 
     position: map.getCenter(), 
     draggable:true, 
     map: map, 
    });      

    google.maps.event.addListener(marker_drag, "click", function() 
    {     
     popup_form.open(map, marker_drag); 
     updateMarkerPosition(marker_drag.getPosition()); 
    }); 

    google.maps.event.addListener(marker_drag, 'dragstart', function() 
    { 
     popup_form.close(); 
    }); 
    google.maps.event.addListener(marker_drag, 'dragend', function() 
    { 
     popup_form.open(map, marker_drag); 
     updateMarkerPosition(marker_drag.getPosition()); 
    }); 


    google.maps.event.addListener(map, 'click', function(event) 
    { 
     marker_drag.setPosition(event.latLng); 
    }); 
} 

function initialize() 
{ 
    map = new google.maps.Map(document.getElementById("map"), 
    { 
     center: new google.maps.LatLng(1.364236,103.796082), 
     zoom: 4, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     mapTypeControl: true, 
     mapTypeControlOptions: 
     { 
      style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR 
     }, 
     navigationControl: true, 
     navigationControlOptions: 
     { 
      style: google.maps.NavigationControlStyle.LARGE 
     } 
    }); 


    add_editable_mkr(); 
} 
+0

哇,它工程太棒了!非常感謝!! – user1224015 2012-02-27 08:19:29