如何动态生成谷歌自动完成地址api

时间:2014-04-24 13:46:04

标签: javascript jquery html google-maps autocomplete

我需要生成n号地址获取器并在json中获取格式化输出,我可以通过按钮单击上的ajax来完成。但是我没有得到如何使用google api动态生成自动完成并单独获取内容。

我需要展示与此小提琴相同的设计类型。

http://jsfiddle.net/6BcUD/

initialize();

var placeSearch, autocomplete;
var componentForm = {
  street_number: 'short_name',
  route: 'long_name',
  locality: 'long_name',
  administrative_area_level_1: 'short_name',
  country: 'long_name',
  postal_code: 'short_name'
};

function initialize() {
  autocomplete = new google.maps.places.Autocomplete(
      /** @type {HTMLInputElement} */(document.getElementById('autocomplete')),
      { types: ['geocode'] });
  google.maps.event.addListener(autocomplete, 'place_changed', function() {
    fillInAddress();
  });
}

function fillInAddress() {
  var place = autocomplete.getPlace();

  for (var component in componentForm) {
    document.getElementById(component).value = '';
    document.getElementById(component).disabled = false;
  }

  for (var i = 0; i < place.address_components.length; i++) {
    var addressType = place.address_components[i].types[0];
    if (componentForm[addressType]) {
      var val = place.address_components[i][componentForm[addressType]];
      document.getElementById(addressType).value = val;
    }
  }
}
function geolocate() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var geolocation = new google.maps.LatLng(
          position.coords.latitude, position.coords.longitude);
      autocomplete.setBounds(new google.maps.LatLngBounds(geolocation,
          geolocation));
    });
  }
}

目前我添加了3个表单,但我需要通过&#34;添加表单&#34;添加表单。按钮,我认为我可以使用jquery追加。但是如何让它在谷歌自动完成工作?

由于

1 个答案:

答案 0 :(得分:0)

如果您想重新使用它来管理多个表单,那么您的javascript代码必须更“通用”,而不是基于DOM元素ID。

包含自动完成实例的全局变量是一个好主意。

我编辑了你的jsFiddle建议你一个基于jQuery的解决方案(你把jQuery标签放在我认为我可以依赖):

  • 我定义了一个div #addressForms,其中表单将在#addForm按钮
  • 上添加后附加
  • 我已将您的表单makup包装在隐藏的div #template中。每次点击#addForm时,模板内容都会被复制,使用自动填充初始化并附加到#addressForms
  • 由于DOM元素ID必须是唯一的,我删除了表单元素id并将它们用作css类
  • 我还删除了您的全局变量componentForm并在每个字段元素上添加了数据(data-type

如果满足您的需求,请查看 jsFiddle

编辑:

我根据你的评论创建了这个 jsFiddle 。它尚未完成,但可以提供帮助。