2012-04-21 16 views
1

當我將地圖上的標記拖動到新位置時,單擊標記時,infowindow將以屬性形式出現:email,:latitude,:longitude inside。如何自動設置這些屬性(緯度和經度)與新位置的信息,以便我只需填寫:電子郵件並單擊提交?這是我的代碼(不完整)。將Google地圖位置數據傳遞給Rails表單?

google.maps.event.addListener(testMarker, 'dragend', function(evt) { 
     var testContent = '<%= form_for @newlazystreeter, :url => { :action => "create" }, :html => {:class => "nifty_form"} do |f| %>'+ 
      '<%= f.text_field :email %><br>'+ 
      '<%= f.text_field :latitude %><br>'+ 
      '<%= f.text_field :longitude %><br>'+ 
      '<%= f.submit "Submit!" %>'+ 
      '<% end %>'; 
     var infowindow = new google.maps.InfoWindow({ 
      content: testContent 
     }); 
     infowindow.open(map,testMarker); 
    }); 
+0

你的代碼是什麼? – DanS 2012-04-21 11:16:32

+0

剛剛添加我的代碼。抱歉! – rebyn 2012-04-21 11:31:51

回答

1

我想,效果會更好,你把表格代碼分開,因爲在某些情況下軌將產生數倍的線條和從HTML到JavaScript代碼的轉換將無法正常工作。

所以,第一件事就是形式的無形專區內添加到DOM和隱藏: 我還添加了一些IDS讓用戶輕鬆找到這些元素後者(形式,經度和緯度)

<div style="display:none"> 
    <%= form_for @newlazystreeter, :url => { :action => "create" }, :html => {:class => "nifty_form", :id => "info_window_form"} do |f| %> 
    <%= f.text_field :email %><br> 
    <%= f.text_field :latitude, :id => 'latitude_field' %><br> 
    <%= f.text_field :longitude, :id => 'longitude_field' %><br> 
    <%= f.submit "Submit!" %> 
    <% end %> 
</div> 

比你創建一個使用表單元素爲內容的選項信息窗口:

var infowindow = new google.maps.InfoWindow({ 
    content: document.getElementById('info_window_form'), 
}); 

而且這裏是我真正回答你的問題。 最後,你必須添加你想要的標記行爲。 您打開infowindow並更新緯度和經度的表格值。

google.maps.event.addListener(testMarker, 'dragend', function(evt) { 
    document.getElementById('latitude_field').value = testMarker.position.lat(); 
    document.getElementById('longitude_field').value = testMarker.position.lng(); 
    infowindow.open(map,testMarker); 
}); 

我建議一兩件事:隱藏這個信息窗口,當您拖動標記。

google.maps.event.addListener(testMarker, 'dragstart', function(evt) { 
    infowindow.close(); 
}); 

記住由DOMContentLoaded引發了聽衆添加這段JavaScript代碼,以確保每一個HTML ID會被發現的。

document.addEventListener('DOMContentLoaded', function() { 
    // add here javascript code to load map and all this stuff above 
}, false); 

這應該運行良好。

+0

嗯,隱藏的div不會在InfoWindow中顯示。 – 2012-11-28 04:49:00