Google地图自动填充功能不适用于2页(2种不同的表单)

时间:2014-10-11 17:12:59

标签: javascript jquery google-maps google-maps-api-3 autocomplete

以下是Google自动填充的设置:

    <script type="text/javascript">
      function initialize() {       

        var from1_input = document.getElementById('autocomplete_from1'); // website.com/page1
        var to1_input   = document.getElementById('autocomplete_to1');   // website.com/page1         
        var from2_input = document.getElementById('autocomplete_from2'); // website.com/page2
        var to2_input   = document.getElementById('autocomplete_to2');   // website.com/page2

        var autocomplete_from1_input = new google.maps.places.Autocomplete(from1_input); // website.com/page1 
        var autocomplete_to_1_input  = new google.maps.places.Autocomplete(to1_input);   // website.com/page1
        var autocomplete_from2_input = new google.maps.places.Autocomplete(from2_input); // website.com/page2
        var autocomplete_to2_input   = new google.maps.places.Autocomplete(to2_input);   // website.com/page2            
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>

问题是表单位于 / page1 上运行良好,但在 / page2 上,自动填充功能无效。

我尝试删除 page1 的javascript,Google自动填充功能正常,因此这意味着自动填充功能正在 page1 上运行或者在 page2 上,但不幸的是现在两者都在。

ID正确无误。

为什么?谷歌有没有限制,还是忽视了什么?

谢谢你们。

修改

<%= javascript_include_tag "https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places,geometry" %>

包含在标题中。

1 个答案:

答案 0 :(得分:0)

因此,您有一个包含输入#autocomplete_from1#autocomplete_to1的网页以及另一个包含输入#autocomplete_from2#autocomplete_to2的网页?

浏览器在发生错误时停止脚本执行,当您在第2页时,错误发生在此处:

var autocomplete_from1_input = new google.maps.places.Autocomplete(from1_input);

...因为输入不存在,所以不会执行以下语句。

您必须避免此错误。有不同的可能解决方案,例如一个try / catch-statement

function initialize() {       

   //try to run the code for page1
 try{
    var from1_input = document.getElementById('autocomplete_from1'); 
    var to1_input   = document.getElementById('autocomplete_to1');  
    var autocomplete_from1_input = new google.maps.places.Autocomplete(from1_input); 
    var autocomplete_to_1_input  = new google.maps.places.Autocomplete(to1_input);   
   }
   //in case of an error run code for page2
 catch(e){
    var from2_input = document.getElementById('autocomplete_from2'); 
    var to2_input = document.getElementById('autocomplete_to2');   
    var autocomplete_from2_input = new google.maps.places.Autocomplete(from2_input); 
    var autocomplete_to2_input = new google.maps.places.Autocomplete(to2_input);   
   }
}